Bridge

GOF Intent:
Decouple an abstraction from its implementation so that the two can vary independently.

نام ديگر: Handle/Body

معمولا وقتي که يک Class چندين نوع پياده سازي دارد، ساده ترين راهي که به ذهن مي رسد inheritance است. يعني Class اصلي را بصورت يک Abstract Class يا Interface در نظر بگيريم و Implementation هاي مختلف آن را بعنوان SubClass هايش.

در اين حالت Abstract مستقيما با Implementation ها وابستگي دارد و هر تغيير در يکي بايد در ديگري لحاظ شود.

در ضمن خود Operation هايي که در Abstract بايد درنظر گرفته شوند، گاهي انواع مختلف دارند.

براي رفع اين دو مشکل Bridge Pattern مي تواند کارساز باشد.

براي درک بهتر Bridge Pattern و جاي کاربرد آن مثالي را پي مي گيريم.

مثال:
وسايل خانه مثل تلويزيون و کولر و غيره. هر يک کارکرد مشخص خود را دارند. اما روشن و خاموش کردن آنها با هم شباهت هايي دارد.

Bridge Design Pattern Sample

در اين حالت يک راه اين است که چنين طراحي داشته باشيم:

Bridge Design Pattern Sample2

اين روش اما مشکلاتي دارد:

  • به ازاي هر وسيله جديد بايد به تعداد روشهاي switch کلاس جديد ايجاد نمود.
  • به ازاي هر Switch جديد بايد براي همه وسيله ها کلاس مربوطه را تعريف کرد.

روش ديگري که ممکن است به نظر برسد اين است که بجاي تعريف Subclass جديد روش هاي مختلف Switch را بصورت متدهاي جداگانه در خود کلاس پياده کنيم.
در اين روش هم به ازاي هر switch جديد ملزم به تغيير تک تک کلاس ها خواهيم بود.

راه ديگر استفاده از Bridge Pattern است.

استفاده از Bridge Design Pattern در مثال بالا:

Bridge Design Pattern Sample 3

ساختار Bridge Pattern بدين صورت است:

Bridge Design Pattern

نمونه کد:

public interface IAppliance{
   public void run();
}


public class TV implements IAppliance{
   public void run(){
      System.out.println(“TV is running. “);
   }
}


public class AirConditioner implements IAppliance{
   public void run(){
      System.out.println(“AirConditioner is running. “);
   }
}


public abstract class Switch{
   protected IAppliance appliance;
   public abstract void turnOn();
}


public class RemoteControl extends Switch{
   public RemoteControl(IAppliance appliance){
      this.appliance = appliance;
   }

   public void turnOn(){
      appliance.run();
   }
}



public static void main(String[] args){
   IAppliance tv = new TV();
   Switch s = new RemoteControl(tv);
   s.turnOn();
}



منبع ها:

  1. Design Patterns – Elements of Reusable Object Oriented Software (GOF) By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  2. Bridge Pattern in devlake

با برچسب:
پست شده در Design Pattern

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*


7 − = هیچ

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

تماس با من: admin@paspars.com