Yazılım geliştirme sürecinde, farklı algoritmaların kullanılması ve bu algoritmaların esnek bir şekilde değiştirilebilmesi önemlidir. Strategy Design Pattern, bu ihtiyaca yönelik olarak geliştirilmiş bir tasarım desenidir. Bu yazıda, Strategy Design Pattern'i adım adım açıklayacak ve nasıl kullanıldığını örneklerle göstermeye çalışacağım.
Strategy Design Pattern, farklı algoritmaları birbirinden bağımsız olarak tanımlamanıza ve bu algoritmaları bir nesne üzerinden değiştirebilmenize olanak sağlar. Bu desen, algoritmaların soyutlanması ve dinamik olarak değiştirilebilmesi için bir arayüz sağlar.
Strategy Design Pattern genellikle aşağıdaki bileşenleri içerir:
Şimdi bir örnek üzerinden Strategy Design Pattern'in nasıl uygulandığını görelim. Örneğimizde bir ödeme işlemi gerçekleştirme senaryosunu ele alalım. Farklı ödeme yöntemleri için farklı stratejiler belirleyeceğiz ve bu stratejileri dinamik olarak değiştireceğiz.
// Strateji arayüzü
interface PaymentStrategy {
public function pay($amount);
}
// Somut Strateji sınıfları
class CreditCardPayment implements PaymentStrategy {
public function pay($amount) {
echo "Kredi kartı ile $amount TL ödeme yapıldı.\n";
}
}
class PayPalPayment implements PaymentStrategy {
public function pay($amount) {
echo "PayPal ile $amount TL ödeme yapıldı.\n";
}
}
class BankTransferPayment implements PaymentStrategy {
public function pay($amount) {
echo "Banka havalesi ile $amount TL ödeme yapıldı.\n";
}
}
// Bağlam sınıfı
class ShoppingCart {
private $paymentStrategy;
public function setPaymentStrategy(PaymentStrategy $paymentStrategy) {
$this->paymentStrategy = $paymentStrategy;
}
public function checkout($amount) {
$this->paymentStrategy->pay($amount);
}
}
Şimdi Strategy Design Pattern'i kullanarak ödeme işlemlerini gerçekleştirelim.
// Kullanım örneği
$shoppingCart = new ShoppingCart();
$creditCardPayment = new CreditCardPayment();
$shoppingCart->setPaymentStrategy($creditCardPayment);
$shoppingCart->checkout(1000); // Kredi kartı ile 1000 TL ödeme yapıldı.
$payPalPayment = new PayPalPayment();
$shoppingCart->setPaymentStrategy($payPalPayment);
$shoppingCart->checkout(500); // PayPal ile 500 TL ödeme yapıldı.
$bankTransferPayment = new BankTransferPayment();
$shoppingCart->setPaymentStrategy($bankTransferPayment);
$shoppingCart->checkout(200); // Banka havalesi ile 200 TL ödeme yapıldı.
Strategy Design Pattern, farklı algoritmaların birbirinden bağımsız olarak tanımlanmasını ve dinamik olarak değiştirilmesini sağlar. Örneklendirme yoluyla Strategy Design Pattern'in nasıl uygulanacağını ve bir ödeme senaryosu üzerinden nasıl kullanılabileceğini gösterdim. Strategy Design Pattern, kodun daha esnek, ölçeklenebilir ve sürdürülebilir olmasına yardımcı olur ve farklı algoritmaların kolayca değiştirilmesini sağlar.