รูปแบบการออกแบบ - รูปแบบสะพาน
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]