Strategy Kalıbı: Değiştirilebilir Algoritmalar
Çalışma zamanında geçiş yapabilmek için sıralama veya ödeme algoritmalarını bir Strategy arayüzünün arkasında kapsülleyin.
Strategy Kalıbı: Değiştirilebilir Algoritmalar, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Strategy Deseninin Amacı
Strategy, bir algoritma ailesi tanımlar, her algoritmayı kapsüller ve bunları birbirinin yerine kullanılabilir hale getirir. Algoritmanın, onu kullanan bağlamdan bağımsız olarak değişmesini sağlar.
Strategy Olmadan Yaşanan Sorun
Strategy olmadan algoritma seçimi if-else zincirlerinin içine gömülür. Yeni bir algoritma eklemek, bağlam sınıfını düzenlemek anlamına gelir — bu da Açık/Kapalı İlkesini ihlal eder.
public double sort(List<Integer> data, String method) {
if (method.equals("bubble")) { /* bubble sort */ }
else if (method.equals("merge")) { /* merge sort */ }
// adding quicksort requires editing this class
}Strategy Arayüzü
Algoritma sözleşmesini temsil eden bir @FunctionalInterface veya normal bir arayüz tanımlayın. Her uygulama farklı bir algoritmayı kapsüller.
public interface SortStrategy {
void sort(List<Integer> data);
}
public class BubbleSortStrategy implements SortStrategy {
public void sort(List<Integer> data) { /* bubble sort logic */ }
}
public class QuickSortStrategy implements SortStrategy {
public void sort(List<Integer> data) { Collections.sort(data); }
}Bağlam Sınıfı
Bağlam, bir Strategy başvurusu tutar ve algoritmanın yürütülmesini ona devreder. Strategy çalışma zamanında değiştirilebilir.
public class Sorter {
private SortStrategy strategy;
public Sorter(SortStrategy strategy) { this.strategy = strategy; }
public void setStrategy(SortStrategy s) { this.strategy = s; }
public void sort(List<Integer> data) { strategy.sort(data); }
}Strategy'leri Çalışma Zamanında Değiştirme
Bağlamı değiştirmeden Strategy'yi anında değiştirin. Böylece davranış sınıfın dışından yapılandırılabilir.
Sorter sorter = new Sorter(new BubbleSortStrategy());
sorter.sort(data); // uses bubble sort
sorter.setStrategy(new QuickSortStrategy());
sorter.sort(data); // now uses quick sortLambda Strategy'leri
Strategy arayüzü bir @FunctionalInterface olduğunda lambda ifadelerini doğrudan kullanın — basit Strategy'ler için açık sınıflara gerek yoktur.
Sorter sorter = new Sorter(data -> Collections.sort(data)); // lambda strategy
// or method reference:
Sorter sorter2 = new Sorter(Collections::sort);Ödeme İşleme için Strategy
Klasik bir gerçek dünya kullanımı şudur: Bir ödeme bağlamı, her birinin ayrıntılarını bilmeden farklı ödeme Strategy'lerini (kredi kartı, PayPal, kripto para) kabul eder.
public interface PaymentStrategy {
void pay(double amount);
}
new PaymentProcessor(new CreditCardStrategy("4111...")).pay(99.99);
new PaymentProcessor(new PayPalStrategy("user@email.com")).pay(99.99);Sıkıştırma için Strategy
Bir dosya işleyicisi CompressionStrategy kullanabilir. Dosya işleme işlem hattını değiştirmeden GZIP, ZIP veya LZ4 ekleyebilirsiniz.
public interface CompressionStrategy {
byte[] compress(byte[] data) throws IOException;
}
public class GzipStrategy implements CompressionStrategy {
public byte[] compress(byte[] data) throws IOException { /* gzip */ return new byte[0]; }
}Strategy ile Fabrikayı Birleştirme
Strategy'yi yapılandırmaya göre seçmek için bir fabrika kullanın; böylece seçim mantığı hem bağlamdan hem de Strategy'lerin kendisinden ayrı tutulur.
SortStrategy strategy = switch (config.getSortMethod()) {
case "bubble" -> new BubbleSortStrategy();
case "merge" -> new MergeSortStrategy();
default -> Collections::sort;
};
new Sorter(strategy).sort(data);Strategy ve Şablon Metodu Karşılaştırması
Şablon Metodu kalıtım kullanır: iskelet temel sınıftadır; alt sınıflar adımları geçersiz kılar. Strategy bileşim kullanır: algoritma tamamen dışarıdadır. Daha fazla esneklik için Strategy'yi tercih edin.
JDK'de Strateji
Comparator, JDK'deki klasik Strateji örneğidir. Koleksiyon koduna dokunmadan sıralama algoritmasını değiştirmek için Collections.sort yöntemine farklı karşılaştırıcılar geçirin.
List<String> names = List.of("Bob", "Alice", "Charlie");
names.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);Stratejileri Sınama
Stratejileri yalıtılmış olarak sınamak kolaydır; birim sınamasında yalnızca strategy.sort(data) çağrısını yapmanız yeterlidir. Bağlamın düzenleme mantığını sınamak için sahte stratejileri bağlama ekleyin.
Hızlı Kontrol
Strateji ile Şablon Metodu arasındaki temel yapısal fark nedir?
Özet
Strateji, birbiriyle değiştirilebilen algoritmaları ortak bir arayüzün arkasında kapsüller. Basit stratejiler için lambda ifadelerini, karmaşık olanlar için sınıfları kullanın. Yapılandırma odaklı seçim için bunları fabrikalarla birleştirin.
Sıkça Sorulan Sorular
“Strategy Kalıbı: Değiştirilebilir Algoritmalar” dersi ücretsiz mi?
Evet — “Strategy Kalıbı: Değiştirilebilir Algoritmalar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Strategy Kalıbı: Değiştirilebilir Algoritmalar” dersinde ne öğreneceğim?
Çalışma zamanında geçiş yapabilmek için sıralama veya ödeme algoritmalarını bir Strategy arayüzünün arkasında kapsülleyin. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Strategy Kalıbı: Değiştirilebilir Algoritmalar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Observer Kalıbı: Olay Bildirimi
- Strategy Kalıbı: Değiştirilebilir Algoritmalar
- Command Kalıbı: Eylemleri Kapsülleme
- Template Method: Algoritma İskeletlerini Tanımlama