Adapter Design Pattern (Tasarım Deseni) – C#

Adaptör tasarım modelinin gerçek hayattaki harika örneklerinden biri mobil şarj cihazıdır. Mobil pilin şarj olması için 3 volta ihtiyacı vardır ancak normal priz ya 120V (ABD) ya da 220V (Türkiye) üretir. Böylece mobil şarj cihazı, mobil şarj prizi ile duvar prizi arasında bir adaptör görevi görür. Özetle mobil şarj adaptörü şebeke elektriği ile mobil cihazınız uyumlu hale getirerek şarj eder. Adapter Design Pattern’da tam olarak bu görevi üstlenir. Yazılım alanında birbirleriyle uyumsuz olan olguları birbirlerine uyumlu hale getirir.

UML Class Diyagramı

Adapter UML Diyagram

Kullanım Sıklığı: orta-yüksek

Adapter Prensipleri

Adaptee isimli sınıf, adapte edilmek istenilen nesneyi etmektedir. Bu nesne doğrudan kullanılmak yerine kendisini referans eden ve istemciye uyumlu hale getirecek Adapter tarafından kullanılır. Aslında Adaptee nesneye ilişkin bir metot Adapter sınıfına ait bir sarmalayıcı metot tarafından çağrılmaktadır.

C# Adapter Design Pattern Uygulama

Bu senaryomuzda Adapter Design Patern’a örnek olması için bir konsol uygulamasında WinForm kullanmaksızın bir MessageBox gösterimi gerçekleştireceğiz.

MessageBox tiplerini belirtmek için bir enum kullanıyoruz.

    public enum Buttons
    {
        OK = 0, OKCancel = 1, YesNo = 2
    }

Windows form üyesi olan MessageBox’ı adapte ediyoruz.

    public class Adaptee
    {
        [DllImport("user32.dll", EntryPoint = "MessageBox", CallingConvention = CallingConvention.Winapi)]
        public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint buttons);
        public void alert(string title, string message, Buttons combination)
        { 
            MessageBox(new IntPtr(), message, title, (uint)combination);
        }
    }

Adaptee class’ını Adapter nesnesi üzerinden ayağa kaldırıyoruz.

    public class Adapter
    {
        private Adaptee adaptee;
        public Adapter()
        {
            adaptee = new Adaptee();
        }
        public void MessageDialog(string title, string text, Buttons buttons)
        { 
            adaptee.alert(title, text, buttons);
        }
    }

Program.cs – Main Method

Adapter adapter = new Adapter();
adapter.MessageDialog("C#", "Merhaba Dünya", Buttons.OK);

Sonuç