C# ile Strategy Pattern Uygulama Rehberi

C# ile Strategy Pattern Uygulama Rehberi


Yazılım geliştirmede, çeşitli tasarım kalıpları kullanmak, kodun daha modüler ve bakımı kolay olmasını sağlar. Strategy Pattern da bu kalıplardan biridir. Bu makalede, C# dilinde Strategy Pattern'in ne olduğunu, nasıl kullanılacağını ve örnek bir uygulama yaparak konuyu daha iyi anlamanızı sağlayacağız.

Strategy Pattern Nedir?

Strategy Pattern, bir algoritmanın bir nesne olarak tanımlanmasını ve bu nesnenin, daha sonra isteğe bağlı olarak değiştirilebilmesini sağlar. Bu tasarım kalıbı, belirli bir işlem için birden fazla algoritma kullanmak istediğinizde işinize yarar. Örneğin, bir ödeme sisteminde, farklı ödeme yöntemlerini (kredi kartı, PayPal, banka havalesi) stratejiler olarak tanımlayabiliriz. Bu sayede, uygulama kullanıcıdan ödeme türünü seçmesini istediğinde uygun stratejiyi kullanarak işlemi gerçekleştirebilir.

Strategy Pattern'in Bileşenleri

1. Context

Context, algoritmaların seçilmesini sağlayan ana nesnedir. İçinde bir Strategy nesnesi bulundurur ve bu nesneyi kullanarak istenilen işlemi gerçekleştirir.

2. Strategy Arayüzü

Algoritmaların implementasyonunu sağlayan bir arayüz oluşturarak, farklı algoritma sınıflarını bu arayüz üzerinden tanımlarız.

3. Concrete Strategies

Strateji arayüzünü uygulayan somut sınıflardır. Her bir sınıf, farklı bir algoritma sunar.

C# ile Strategy Pattern Uygulaması

Aşağıdaki kod örneğinde, bir ödeme işlemi için strategy pattern uygulamasını göreceksiniz. Öncelikle gerekli sınıfları tanımlayalım:

using System;

// Strategy Arayüzü
public interface IPaymentStrategy
{
    void Pay(decimal amount);
}

// Concrete Strategies
public class CreditCardPayment : IPaymentStrategy
{
    public void Pay(decimal amount)
    {
        Console.WriteLine($"{amount} TL kredi kartıyla ödendi.");
    }
}

public class PayPalPayment : IPaymentStrategy
{
    public void Pay(decimal amount)
    {
        Console.WriteLine($"{amount} TL PayPal ile ödendi.");
    }
}

// Context
public class ShoppingCart
{
    private IPaymentStrategy _paymentStrategy;

    public void SetPaymentStrategy(IPaymentStrategy paymentStrategy)
    {
        _paymentStrategy = paymentStrategy;
    }

    public void Checkout(decimal amount)
    {
        _paymentStrategy.Pay(amount);
    }
}

Bu uygulama ile farklı ödeme yöntemlerini kolayca ekleyebiliriz. Örneğin, aşağıdaki gibi kullanabiliriz:

class Program
{
    static void Main(string[] args)
    {
        ShoppingCart cart = new ShoppingCart();

        // Kredi kartı ile ödeme
        cart.SetPaymentStrategy(new CreditCardPayment());
        cart.Checkout(150);

        // PayPal ile ödeme
        cart.SetPaymentStrategy(new PayPalPayment());
        cart.Checkout(200);
    }
}

Yukarıdaki örnekte, kullanıcı ödeme yöntemi olarak önce kredi kartını seçmekte, daha sonra PayPal ile ödemenin gerçekleştirilmesine geçmektedir. Strategy Pattern sayesinde, uygulamamızda yeni bir ödeme yöntemi eklemek oldukça kolaydır; yalnızca yeni bir sınıf oluşturup IPaymentStrategy arayüzünü implement etmemiz yeterlidir.

Sonuç

Strategy Pattern, C# gibi nesne yönelimli dillerde yazılım geliştirme sürecini daha esnek ve yönetilebilir hale getirir. Yazılım mimarisi içinde strateji kalıbını kullanarak, değişken davranışları dilediğimiz gibi yönetebiliriz. Bu makalede, Strategy Pattern'in ne olduğunu, bileşenlerini ve C# ile nasıl uygulanacağını öğrendik. Artık bu kalıbı kendi projelerinizde rahatlıkla kullanabilirsiniz.