Strategy deseni
Çalışma anında değiştirilebilir algoritma paketleyen Strategy desenini öğrenirsin.
Strategy deseni ne yapar?
Strategy deseni, aynı amaca hizmet eden ama farklı davranan algoritmaları paketlemeyi sağlar. Örneğin ödeme işleminde kredi kartı, havale ve nakit farklı stratejiler olabilir.
Tüm stratejiler ortak bir arayüz olan Algorithm'i uygular. Bir Context sınıfı hangi stratejinin kullanılacağını bilir; istemci yalnızca Context ile konuşur. Çalışma anında strateji değiştirilebilir; böylece sınıf hiyerarşisi değişmeden davranış esnek kalır.
Somut stratejiler ve Context.run
Her somut strateji Algorithm arayüzünü uygular ve compute yönteminde kendi davranışını yazar. Örneğin ConcreteStrategyA 'A sonucu', ConcreteStrategyB 'B sonucu' döndürebilir.
Context sınıfı kurucuda bir Algorithm örneği alır ve run yönteminde bu örneğin compute yöntemini çağırır. İstemci hangi somut sınıfın kullanıldığını bilmeksizin Context'i çalıştırır.
Uygulama Strategy uygula ve sonucu yazdır
Bir Algorithm arayüzü yaz (compute(): string yöntemi olsun). ConcreteStrategyA 'A sonucu' döndürsün. Bir Context sınıfı yaz; kurucuda Algorithm alsın ve run yönteminde compute'u çağırıp sonucu döndürsün. Context'e A stratejisini ver ve run ile sonucu yazdır.
Örnek çözümü göster
string; } yaz. ConcreteStrategyA için 'A sonucu' döndür. Context kurucuda Algorithm alsın, run içinde compute çağırıp döndürsün. new Context(new ConcreteStrategyA()) ile çalıştır, ->run() ile yazdır.
Örnek çözüm:
<?php
interface Algorithm {
public function compute(): string;
}
class ConcreteStrategyA implements Algorithm {
public function compute(): string { return 'A sonucu'; }
}
class ConcreteStrategyB implements Algorithm {
public function compute(): string { return 'B sonucu'; }
}
class Context {
public function __construct(private Algorithm $algo) {}
public function run(): string { return $this->algo->compute(); }
}
$c = new Context(new ConcreteStrategyA());
echo $c->run();
Kendini test et
-
Strategy deseni ne sağlar?
- Çalışma anında algoritma değişimi
- Sınıfın kalıtım yoluyla genişlemesi
- Tek örnek guarantee edilmesi
- Dış sistemle uyumluluk sağlanması
Cevabı göster
Çalışma anında algoritma değişimi — Doğru. Strategy, çalışma anında algoritmayı değiştirmeyi sağlar.
-
Context'in tuttuğu arayüz
<?php class Context { public function __construct(private ____ $algo) {} public function run(): string { return $this->algo->compute(); } }Cevabı göster
<?php class Context { public function __construct(private Algorithm $algo) {} public function run(): string { return $this->algo->compute(); } } -
Strategy kavramlarını eşleştir
- Algorithm
- arayüz
- Context
- stratejiyi tutar
- ConcreteStrategyA
- somut strateji A
- run
- stratejiyi uygular