Strategy Pattern

Strategy Pattern nedir ? 🤔

Bu sorunun cevabi ile makaleye baslayalim.

Strategy Pattern, duruma göre birçok işi birbirinden bağımsız şekilde tanımlayarak bu işleri arayüz vasıtasıyla birbirlerinden soyutlamamızı ve duruma göre hangi iş parçacığının çalışacağına kolaylıkla karar vermemizi sağlayan bir tasarım desenidir. Öncelikle bu deseni daha etkili bir şekilde kullanabilir ve bu sayede if-else tekrarından kurtulabiliriz. Ancak, bu sonraki yazılarımın konusu şimdilik bu desene bir giriş yapalım.

Bir senaryo üzerinden pratik yapalım. Bir ödeme entegrasyonu yapmamızı istediler ve yemek kartımıza göre işleteceğimiz farklı logicler var. İşte böyle bir senaryoda bu desen bize iyi gelecek.😉

Console uygulamasi uzerinden pratik yapalim.

dotnet new console -n StrategyPattern

Öncelikle işe bir interface oluşturarak başlayalım.

public interface IStrategy
{
    public void Execute();
}

Tüm iş parçacıklarımıza bu arayüzü uygulayarak zamanı geldiğinde ilgili logic işlemini çalıştıracağız.

public class Edenred : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Odeme edenred kart ile alindi.");
    }
}
public class Metropol : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Odeme metropol kart ile alindi.");
    }
}
public class Multinet : IStrategy
{
    public void Execute()
    {
        Console.WriteLine("Odeme multinet kart ile alindi.");
    }
}

Daha sonra çalışacak olan logice karar verecek bir class yaratalım.

public class Execute
{

    public void ProcessPaymentCard(PaymentCard paymentCard)
    {
        if (paymentCard == PaymentCard.MULTINET)
        {
            ExecutePayment(new Multinet());
        }
        if (paymentCard == PaymentCard.EDENRED)
        {
            ExecutePayment(new Edenred());
        }
        if (paymentCard == PaymentCard.METROPOL)
        {
            ExecutePayment(new Metropol());
        }
    }


    public void ExecutePayment(IStrategy payment) => payment.Execute();
}

Yukarıda ki kod parçacığında görüldüğü gibi tum nesneler IStrategy arayüzünden türediği için nesneyi ExecutePayment metoduna verebiliyoruz.

Program.cs

var execute = new Execute();
execute.ProcessPaymentCard(PaymentCard.EDENRED);


public enum PaymentCard
{
    METROPOL,EDENRED,MULTINET
}
SOLUTION

Bunun sonucunda ilgili class(EDENRED) execute edilerek istedigimiz sonucu alabileceğiz.

Bu makalede basit bir örnek üzerinden göstermek istedim.Görüşmek dileğiyle!!👋