Strategy Design Pattern, bir algoritmanın farklı varyasyonlarını tanımlamak ve bunları runtime'da değiştirerek birbirleri yerine kullanabilmek için kullanılır.
E-ticaret domain'indeki sepeti düşünelim. Sepeti kredi kartı veya pazar yerinin cüzdanı ile ödeyebilirim. Bunlar birer stratejidir, birbirlerinin yerine kullanılabilirler ve aynı işlemi gerçekleştirirler. Bu tür durumlarda Strategy Design Pattern tercih edilir.
Strategy Design Pattern; Context, Strategy ve ConcreteStrategy olmak üzere 3 öğeden oluşur.
Örneğimize göre; CreditCardStrategy ve WalletStrategy, ConcreteStrategy öğeleridir. IPaymentStrategy ise Strategy öğesidir. Yani strategy'lerin arayüzüdür. Cart ise Context öğesidir. Yani strategy'yi kullanacak olan nesnedir.
Strategy'lerin arayüzünü oluşturmakla başlayalım.
Daha sonra bu arayüzü implement eden strategy'leri oluşturalım.
Şimdi de Cart sınıfını oluşturalım.
Cart ödeme için bir tane strategy alır ve ödeme işleminde bu strategy'i kullanır. Kullanımı aşağıdaki gibi olacak.
Hem her strategy'nin bir sorumluluğu olduğu için Single Responsibility prensibine uygun hem de mevcut kodu düzenlemeden yeni strategy'ler eklenebildiği için Open-Closed prensibine uygun. Interface yerine abstract sınıf ile tasarlasaydık, alt sınıflar üst sınıfların da yerine kullanılabilir olduğu için Liskov Substitution prensibine de uygun olurdu.
Örnek koda aşağıdaki Github adresimden erişebilirsiniz.
Vesselam.
Yorum bırak
Yanıtla
Yanıtlamayı iptal et