รูปแบบการออกแบบ - รูปแบบสะพาน

Bridge ใช้เมื่อเราต้องการแยกสิ่งที่เป็นนามธรรมออกจากการนำไปใช้เพื่อให้ทั้งสองแตกต่างกันอย่างอิสระ รูปแบบการออกแบบประเภทนี้อยู่ภายใต้รูปแบบโครงสร้างเนื่องจากรูปแบบนี้แยกคลาสการนำไปใช้งานและคลาสนามธรรมโดยจัดเตรียมโครงสร้างสะพานระหว่างพวกเขา

รูปแบบนี้เกี่ยวข้องกับอินเทอร์เฟซซึ่งทำหน้าที่เป็นสะพานเชื่อมซึ่งทำให้การทำงานของคลาสคอนกรีตเป็นอิสระจากคลาสของอินเทอร์เฟซ คลาสทั้งสองประเภทสามารถเปลี่ยนแปลงโครงสร้างได้โดยไม่ส่งผลกระทบต่อกันและกัน

เรากำลังสาธิตการใช้รูปแบบ Bridge ผ่านตัวอย่างต่อไปนี้ซึ่งสามารถวาดวงกลมด้วยสีที่ต่างกันโดยใช้วิธีคลาสนามธรรมเดียวกัน แต่คลาสตัวดำเนินการบริดจ์ต่างกัน

การนำไปใช้

เรามีอินเทอร์เฟซDrawAPIซึ่งทำหน้าที่เป็นตัวดำเนินการบริดจ์และคลาสคอนกรีตRedCircle , GreenCircle ที่ใช้อินเทอร์เฟซDrawAPI รูปร่างเป็นระดับนามธรรมและจะใช้วัตถุของDrawAPI BridgePatternDemoคลาสสาธิตของเราจะใช้คลาสShapeเพื่อวาดวงกลมสีต่างๆ

ขั้นตอนที่ 1

สร้างอินเทอร์เฟซตัวใช้บริดจ์

DrawAPI.java

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

ขั้นตอนที่ 2

สร้างคลาสตัวดำเนินการสะพานคอนกรีตที่ใช้อินเทอร์เฟซ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

สร้างคลาสนามธรรมรูปร่างโดยใช้อินเทอร์เฟซDrawAPI

Shape.java

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

ขั้นตอนที่ 4

สร้างคลาสคอนกรีตโดยใช้อินเตอร์เฟส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]