Bridge Design Pattern

Bridge Design Pattern

Bridge tasarım deseni implementasyonları abstractlardan ayırabilmek için kullanılır.

Uml diagramında da görüldüğü gibi , iki adet implementasyon sınıfı , bu sınıfların türetildiği interface ve bu interfacesin bağlı olduğu abstraction classı mevcut. Bu interface ve classların ne iş yaptıklarına aşağıda kısaca değinelim.

ImplementationA , ImplementationB : Esas fonksiyonaliteyi içerisinde barındıran classlar.

Bridge  :  ImplementionA ve ImplementationB classının türediği interface. Bu interface’in görevi abstraction ile Implementation classları arasında köprü görevi görmesi ve onları bağlamasıdır.

Abstraction : Abstraction classı, bridge üzerinden esas classlara ve onların metotlarına ulaşarak bunları clienta ulaştırır. Böylece implementasyon classlarını clienttan soyutlamış olur.

NE ZAMAN BRIDGE TASARIM DESENİ KULLANMALIYIM ?

  *  İmplementasyonları clienttan tamamen ayırmak istiyorsanız…
  *  İmplementasyonları direkt olarak clientla iletişime geçen abstractiona bağlamak istemiyorsanız…
  *  Abstraction classını rebuild dahi etmeden implementasyonlar içerisinde değişiklik yapmak istiyorsanız…

Aşağıda Bridge tasarım deseninin teorik implementasyonu verilmiştir. Abstraction classı , main class tarafından ulaşılabilinen classtır yani temsili olarak bizim clientımızın ulaştığı ve fonksiyonel classları clienttan soyutlayan classtır. Bridge ise abrastion ile iletişimde olan classtır. Bridge classı köprü vazifesi gördüğünden tüm fonksiyonel classların atası olmak zorundadır.

  interface Bridge
  {
    string OperationImp();
  }

  class ImplementationA : Bridge
  {
      public string OperationImp()
      {
        return "Implementation A";
      }
  }

  class ImplementationB : Bridge
  {
     public string OperationImp()
     {
       return "Implementation B";
     }
  }
 
  class Abstraction 
  { 
     Bridge bridge;  

     public Abstraction(Bridge Implementation) 
     {  bridge = Implementation;  }  

     public string Operation()  
     {  
       return "Abstraction <> " + bridge.OperationImp();  
     }  
  }
 class Program
 {
    static void Main(string[] args)
    {
       Console.WriteLine("Bridge Pattern \n");
       Console.WriteLine(new Abstraction(new ImplementationA()).Operation());
       Console.WriteLine(new Abstraction(new ImplementationB()).Operation());

      Console.ReadKey();
   }
 }