Mẫu thiết kế - Mẫu cầu
Bridge được sử dụng khi chúng ta cần tách một phần trừu tượng khỏi việc triển khai nó để cả hai có thể khác nhau một cách độc lập. Loại mẫu thiết kế này nằm dưới mẫu cấu trúc vì mẫu này tách lớp thực thi và lớp trừu tượng bằng cách cung cấp cấu trúc cầu nối giữa chúng.
Mẫu này liên quan đến một giao diện hoạt động như một cầu nối làm cho chức năng của các lớp cụ thể độc lập với các lớp của trình triển khai giao diện. Cả hai loại lớp có thể được thay đổi cấu trúc mà không ảnh hưởng đến nhau.
Chúng tôi đang trình diễn việc sử dụng mẫu Bridge thông qua ví dụ sau trong đó một vòng tròn có thể được vẽ bằng các màu khác nhau bằng cách sử dụng cùng một phương thức lớp trừu tượng nhưng các lớp trình triển khai cầu khác nhau.
Thực hiện
Chúng ta có một giao diện DrawAPI hoạt động như một trình triển khai cầu nối và các lớp cụ thể RedCircle , GreenCircle triển khai giao diện DrawAPI . Shape là một lớp trừu tượng và sẽ sử dụng đối tượng của DrawAPI . BridgePatternDemo , lớp demo của chúng ta sẽ sử dụng lớp Shape để vẽ các vòng tròn có màu khác nhau.
Bước 1
Tạo giao diện trình triển khai cầu nối.
DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
Bước 2
Tạo các lớp triển khai cầu bê tông thực hiện giao diện 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 + "]");
}
}
Bước 3
Tạo một hình dạng lớp trừu tượng bằng giao diện DrawAPI .
Shape.java
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
Bước 4
Tạo lớp cụ thể thực hiện giao diện 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);
}
}
Bước 5
Sử dụng các lớp Shape và DrawAPI để vẽ các vòng tròn màu khác nhau.
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();
}
}
Bước 6
Xác minh kết quả đầu ra.
Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[ color: green, radius: 10, x: 100, 100]