بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Bridge

زمانی که می خواهیم انتزاع از پیاده سازی اش جدا کنیم، بطوری که هردوی آن ها مستقل از هم باشن، از Bridge استفاده می کنیم. این نوع از الگوی طراحی از آن جایی که کلاسِ پیاده سازی شده را جداسازی می کنه و کلاس را با ارئه ی ساختارِ Bridge میان آن ها، abstract می کنه، زیرگروه الگوی ساختاری (structural) محسوب میشه.

این الگو دارای رابطیِه که بعنوان یک bridge عمل می کنه و عملکرد کلاس های concrete را از کلاس های پیاده کننده ی رابط مستقل می کنه. هر دو نوع کلاس ها می توانند بدون آن که بریک دیگر تأثیر بذارن، از لحاظ ساختاری تغییر کنن.

استفاده از الگوی Bridge را از طریق مثال زیر به شما یاد میدیم که در آن، دایره ای با استفاده از متدِ کلاسِ abstract یکسان ولی با کلاس های پیاده کننده ی bridge متفاوت، به رنگ های مختلف کشیده میشه.

پیاده سازی

یک رابط DrawAPI داریم که بعنوان پیاده کننده ی bridge عمل می کنه و کلاس های concrete به نامِ RedCircle و GreenCircle، رابطِ DrawAPI را پیاده سازی می کنن.
Shape در یک کلاسِ abstract قرار داره و از شیِ DrawAPI استفاده می کنه. BridgePatternDemo، نسخه ی آزمایشیِ کلاس مان از کلاس Shape برای کشیدن دایره به رنگ های مختلف استفاده می کنه.

bridge pattern uml diagram

مرحله ی 1

ایجاد رابط پیاده کننده ی bridge.

DrawAPI.java

public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}

مرحله ی 2

ایجاد کلاس های پیاده کننده یconcrete bridge که رابط DrawAPI را پیاده سازی می کنن.

RedCircle.java

public class RedCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
   }
}

GreenCircle.java

public class GreenCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]");
   }
}

مرحله ی 3

ایجاد کلاسی انتزاعی (abstract) به نام Shape با استفاده از رابطِ DrawAPI.

Shape.java

public abstract class Shape {
   protected DrawAPI drawAPI;
   
   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();	
}

مرحله ی 4

ایجاد کلاس concreteای که رابطِ Shape را پیاده سازی می کنه.

Circle.java

public class Circle extends Shape {
   private int x, y, radius;

   public Circle(int x, int y, int radius, DrawAPI drawAPI) {
      super(drawAPI);
      this.x = x;  
      this.y = y;  
      this.radius = radius;
   }

   public void draw() {
      drawAPI.drawCircle(radius,x,y);
   }
}

مرحله ی 5

استفاده از Shape و DrawAPI برای کشیدن دایره های با رنگ های متفاوت.

BridgePatternDemo.java

public class BridgePatternDemo {
   public static void main(String[] args) {
      Shape redCircle = new Circle(100,100, 10, new RedCircle());
      Shape greenCircle = new Circle(100,100, 10, new GreenCircle());

      redCircle.draw();
      greenCircle.draw();
   }
}

مرحله ی 6

بررسی خروجی

Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[  color: green, radius: 10, x: 100, 100]

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد