Strateji Tasarım Deseni: Esnek Kod İçin Güçlü Bir Araç

Emincan Özcan
Huawei Developers - Türkiye
3 min readJun 23, 2023
Strategy Design Pattern

Giriş

Daha önce nesnelerin davranışlarını çalışma zamanında dinamik olarak değiştirmeniz gereken bir durumla karşılaştınız mı? Ya da birden çok koşullu ifade nedeniyle bakımı zorlaşan bir kodla uğraştınız mı? Eğer öyleyse, Strateji Tasarım Deseni aradığınız çözüm olabilir. Bu makalede, Strateji desenini, avantajlarını ve kodunuzda nasıl uygulayabileceğinizi inceleyeceğiz.

Strateji Tasarım Deseni Nedir?

Strateji Tasarım Deseni, davranışları tanımlamanıza, her birini kapsüllemenize ve bunları değiştirilebilir hale getirmenize olanak tanıyan davranışsal bir tasarım desenidir. Bu desen, nesneler arasında seçim yapmanızı ve çalışma zamanında bir algoritmayı seçip kullanmanızı sağlar ve istemci kodunu belirli bir uygulamaya sıkı bir şekilde bağlamadan yapar. Bu desen, kodun tekrar kullanılabilirliğini, esnekliğini ve bakımını destekler.

Strateji deseninin temelinde, Context ve Stratejiler adı verilen iki ana bileşen bulunur. Context, davranışını dinamik olarak değiştirmesi gereken nesneyi temsil ederken, Stratejiler farklı algoritmaları veya davranışları kapsüller.

Nasıl Çalışır?

Bir alışveriş uygulamasının toplam maliyetini hesaplayan bir senaryoyu ele alalım. Uygulama, kullanıcının üyelik durumuna bağlı olarak farklı türde indirimler sunar: normal, premium veya VIP. Strateji desenini kullanmadan, şu şekilde çok sayıda koşullu ifadeye sahip olabiliriz:

if (userMembershipStatus == MembershipStatus.REGULAR) {
// Apply regular discount calculation logic
} else if (userMembershipStatus == MembershipStatus.PREMIUM) {
// Apply premium discount calculation logic
} else if (userMembershipStatus == MembershipStatus.VIP) {
// Apply VIP discount calculation logic
}

Gördüğünüz gibi, bu yaklaşım hızla kullanımı zor ve bakımı zor bir hale gelir, özellikle daha fazla üyelik durumu ve buna bağlı indirimler eklendikçe. İşte Strateji deseni burada devreye girer.

Strateji Tasarım Deseni Uygulaması

Strateji desenini uygulamak için şu adımları takip ederiz:

  1. Strateji interface’ini tanımlayın: Bu interface, farklı algoritmaları veya davranışları temsil eden yöntemleri tanımlar. Örneğimizde, DiscountStrategy interface’i olabilir ve calculateDiscount() gibi bir metoda sahip olabilir.
  2. Stratejileri uygulayın: DiscountStrategy interface’ini implement eden sınıflar oluşturun. Her biri belirli bir üyelik durumu için özel bir indirim hesaplama mantığı sağlamalıdır. (örneğin, RegularDiscountStrategy, PremiumDiscountStrategy, VIPDiscountStrategy).
  3. Bir context oluşturun: Context sınıfı, mevcut olarak seçilen Stratejiye bir referansı tutar ve davranışı ona yönlendirir. Context, Stratejiyi dinamik olarak ayarlamak için bir yöntem ve algoritma yürütme işlemini tetikleyen başka bir yöntem sağlar.
  4. Stratejiyi kullanın: İstemci kodunda, Context sınıfının bir örneğini oluşturun ve kullanıcının üyelik durumuna bağlı olarak istenen Stratejiyi dinamik olarak ayarlayın. Son olarak, algoritma yürütme işlemini başlatan yöntemi çağırın (örneğin, context.calculateDiscount()).

Strateji desenini alışveriş uygulamamıza uygulayarak, çok daha temiz ve bakımı kolay bir kod tabanına ulaşabiliriz. Koşullu ifadeler, değiştirilebilir Strateji nesneleriyle değiştirilir, böylece Context veya istemci kodunu değiştirmeden indirim hesaplama mantığı kolayca eklenip değiştirilebilir.

Strateji Tasarım Deseninin Avantajları

Strateji deseni birçok avantaj sunar, bunlar arasında:

  1. Esneklik: Strateji deseni, çalışma zamanında algoritma seçimi ve değiştirme olanağı sağlayarak değişen gereksinimlere adapte olma esnekliği sunar.
  2. Kod Tekrar kullanılabilirliği: Stratejiler, belirli davranışları kapsüller ve bu nedenle farklı contextler veya uygulamalar arasında kolayca yeniden kullanılabilir.
  3. Bakılabilirlik: Desen, koşullu ifadelerin sayısını azaltır ve Context ile Stratejiler arasında açık bir ayrım sağlayarak kod bakımını teşvik eder.
  4. Test Edilebilirlik: Stratejiler bağımsız olarak test edilebilir, bu da test sürecini basitleştirir ve genel olarak kod kalitesini artırır.

Sonuç

Strateji Tasarım Deseni, esnek ve bakımı kolay kod elde etmek için güçlü bir araçtır. Algoritmaları veya davranışları değiştirilebilir Strateji nesnelerine kapsülleyerek nesnelerin davranışlarını çalışma zamanında dinamik olarak değiştirebiliriz. Bu, daha yeniden kullanılabilir, test edilebilir ve bakımı kolay bir kod tabanı sağlar.

Gelecekte değişen gereksinimler veya karmaşık koşullu mantıkla karşılaştığınızda, kodunuzu daha uyumlu ve sağlam hale getirmek için Strateji desenini uygulamayı düşünün.

Keyifli kodlamalar!

Referanslar

--

--