Strategy Pattern (Strateji Deseni), bir ailenin çeşitli algoritmalarını kapsüller ve bu algoritmaların birbirlerinin yerine kullanılmasını sağlar. Strategy pattern, bir nesnenin davranışını çalıştırma zamanında değiştirmeye olanak tanır. Bu desen, belirli bir görevi yerine getirmek için birden fazla yol sunarak, kullanıcıya hangi algoritmayı kullanacağını seçme esnekliği sağlar.

Neden ve Nerede Kullanılır?
- Esneklik: Farklı algoritmaları dinamik olarak değiştirme olanağı sunar.
- Ayrılabilirlik: Algoritmaların ve iş mantığının ayrılmasını sağlar, bu da kodun daha modüler ve yönetilebilir olmasını sağlar.
- Bakım Kolaylığı: Yeni algoritmalar eklemek veya mevcut olanları değiştirmek daha kolaydır.
- Tekar Kullanılabilirlik: Farklı algoritmalar tekrar kullanılabilir ve aynı arayüzü paylaşarak birbiriyle değiştirilebilir.
Örnek Kod
// Strateji arayüzü
class Strategy {
execute(data) {
throw new Error("This method should be overridden!");
}
}
// Stratejiler
class StrategyA extends Strategy {
execute(data) {
console.log("Strategy A executed with data:", data);
}
}
class StrategyB extends Strategy {
execute(data) {
console.log("Strategy B executed with data:", data);
}
}
// Context sınıfı
class Context {
constructor(strategy) {
this.strategy = strategy;
}
setStrategy(strategy) {
this.strategy = strategy;
}
executeStrategy(data) {
this.strategy.execute(data);
}
}
// Kullanım
const context = new Context(new StrategyA());
context.executeStrategy("Sample Data"); // "Strategy A executed with data: Sample Data"
context.setStrategy(new StrategyB());
context.executeStrategy("Sample Data"); // "Strategy B executed with data: Sample Data"
Açıklama
- ‘Strategy’ sınıfı, tüm stratejilerin uyacağı ortak bir arayüz tanımlar.
- ‘StrategyA’ ve ‘StrategyB’ sınıfları, ‘Strategy’ arayüzünü uygular ve kendi ‘execute’ yöntemini sağlar.
- ‘Context’ sınıfı, stratejiyi içeren ve stratejiyi çalıştıran sınıftır. ‘setStrategy’ yöntemi ile stratejiyi değiştirebiliriz.
- Kullanım kısmında, ‘Context’ nesnesi oluşturulur ve başlangıçta ‘StrategyA’ kullanılır. Daha sonra ‘setStrategy’ yöntemi ile strateji ‘StrategyB’ olarak değiştirilir.
Özetle
Strategy Pattern, bir ailenin çeşitli algoritmalarını kapsüller ve bu algoritmaların birbirlerinin yerine kullanılmasını sağlar. Bu desen, algoritmaların dinamik olarak seçilmesine ve değiştirilmesine olanak tanır, böylece daha esnek ve modüler bir tasarım elde edilir. Özellikle algoritmaların veya iş mantığının değişken olduğu durumlarda, bu desen kullanılarak kodun daha yönetilebilir ve genişletilebilir olması sağlanır.