Strategy
- Java kursu
- İleri seviye
- Ders 39/82
- 5 dk
Strategy desenini öğrenirsin.
Strategy deseni
Strategy, aynı işi yapan farklı algoritmaları değiştirilebilir kılar. Bir arayüz bir davranışı tanımlar; her somut sınıf bir algoritmadır. Bağlam (context) sınıfı, bir Strategy başvurusu tutar ve çalışma anında değiştirebilir.
Örnek: Payment arayüzü pay(int amount) tanımlar; CashPayment ve CardPayment iki algoritmadır. Cart sınıfı setPayment ile ödeme yöntemini değiştirir. Bu, büyük if-else zincirleri yerine temiz bir ayrım sağlar.
Lambda ile strategy
Bir Strategy arayüzü tek bir soyut yöntem içeriyorsa (işlevsel arayüz), lambda ile yazılabilir. Payment p = amount -> System.out.println(amount) biçiminde yeni bir sınıf tanımlamadan strategy oluşturulur.
Bu, özellikle küçük ve bir kez kullanılan algoritmalar için pratiktir. Yine de karmaşık algoritmalar adlı sınıflar olarak kalır; çünkü okunabilirlik ve test edilebilirlik önemlidir. Lambda, Strategy'nin gücünü daha da artırır.
Uygulama Ödeme strategy'sini uygula
Bir Payment arayüzü tanımla: void pay(int amount). CardPayment sınıfı bu arayüzü uygulasın ve pay içinde System.out.println ile kart ve amount değerini yazdırsın ("kart " + amount). Cart sınıfı setPayment(Payment) ve checkout(int amount) yöntemlerini içersin; checkout, p.pay(amount) çağrısı yapsın. main içinde CardPayment ile checkout(100) çağır.
Başlangıç kodu
// Payment arayüzünü ve CardPayment sınıfını tanımla
// Cart sınıfına setPayment ekle
// main içinde checkout çağırÖrnek çözüm
interface Payment { void pay(int amount); }
class CardPayment implements Payment {
public void pay(int amount) { System.out.println("kart " + amount); }
}
class Cart {
private Payment p;
public void setPayment(Payment p) { this.p = p; }
public void checkout(int amount) { p.pay(amount); }
}
public class StrategyDemo {
public static void main(String[] args) {
Cart c = new Cart();
c.setPayment(new CardPayment());
c.checkout(100);
}
}Beklenen çıktı
kart 100
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Strategy çağrısını tamamla
cart.setPayment(new ____());
cart.setPayment(new CardPayment());
Açıklama: CardPayment bir Strategy uygulamasıdır.
2 Strategy deseni ne zaman kullanılır?
- Nesne sarma gerektiğinde
- Tek örnek gerektiğinde
- Aynı işin farklı algoritmalarla yapılacağı zaman Doğru cevap
- Bildirim gönderileceğinde
Açıklama: Strategy, aynı işin farklı algoritmalarla yapılması için kullanılır.
3 Strategy parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
Payment |
Ortak arayüz |
CardPayment |
Bir algoritma |
setPayment |
Strategy değiştirme |
p.pay(amount) |
Algoritmayı çalıştırma |