Adapter Pattern Nedir?

Uyumsuz arayüzlerin birlikte sorunsuz bir şekilde çalışmasını sağlamak için kullanılan önemli bir tasarım modelidir. Bir köprü görevi görerek iki farklı sistemin zahmetsizce iletişim kurmasını sağlar. Adapter, adapte edilen sınıfın arka planındaki karmaşıklığı gizler. Bu, kodun daha modüler ve bakımı daha kolay hale gelmesini sağlar.

Adapter Pattern Uml

Gerçek bir senaryo olması adına, ödeme sistemimize üçüncü taraf bir ödeme sağlayıcısını entegre etmek istersek. Bu tasarım desenine uygun olarak şöyle bir geliştirme yapabiliriz:

Önce IPaymentProvider adında bir interface oluşturalım.

C#
public interface IPaymentProvider
{
    void ProcessPayment(double amount);
}

Bu interface i kullanacak olan XBankPaymentProvider class ımız:

C#
public class XBankPaymentProvider : IPaymentProvider
{
    public void ProcessPayment(double amount)
    {
        Console.WriteLine($"Ödeme XBank aracılıyla yapılmıştır. ");
    }
}

Ödeme sistemimiz:

C#
public class PaymentSystem
{
    private readonly IPaymentProvider _paymentProvider;

    public PaymentSystem(IPaymentProvider paymentProvider)
    {
        _paymentProvider = paymentProvider;
    }

    public void MakePayment(double amount)
    {
        _paymentProvider.ProcessPayment(amount);
    }
}

Şimdide nasıl kullanacağımıza bakalım.

C#
internal class Program
{
    static void Main(string[] args)
    {
        IPaymentProvider paymentProvider = new XBankPaymentProvider();
        PaymentSystem paymentSystem = new PaymentSystem(paymentProvider);
        paymentSystem.MakePayment(250);
        Console.ReadLine();
    }
}

Bu örnekte, IPaymentProvider interface ‘ini kullanarak X bir bankanın ödeme sistemini entegre ettik.

Bu şekilde, sisteminize farklı bankaları entegre etmek istediğinizde sadece ilgili IPaymentProvider arabirimini uygulayan yeni bir sınıf oluşturmanız yeterli olacaktır. Bu, sisteminizin esnekliğini artırır ve yeniden kullanılabilirliğini sağlar. Ayrıca SOLID prensiplerinden Open/Closed Principle kuralına da uyum sağlamış oluruz.

Bir sonraki yazıda görüşmek üzere 🙂

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir