📅  最后修改于: 2020-12-21 02:00:10             🧑  作者: Mango
当我们需要将抽象与其实现解耦时,可以使用Bridge,以便两者可以独立变化。这种类型的设计模式属于结构模式,因为该模式通过在实现类和抽象类之间提供桥梁结构来使它们分离。
此模式涉及一个充当桥梁的接口,该接口使具体类的功能独立于接口实现者类。两种类型的类都可以在结构上更改而不会互相影响。
我们通过以下示例演示桥模式的使用,在该示例中,可以使用相同的抽象类方法但使用不同的桥实现程序类以不同的颜色绘制圆。
我们有一个DrawAPI接口,它充当桥实现者,而具体类RedCircle和GreenCircle实现了DrawAPI接口。 Shape是一个抽象类,将使用DrawAPI的对象。 BridgePatternDemo ,我们的演示类将使用Shape类绘制不同的彩色圆圈。
创建网桥实现者接口。
DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
创建实现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 + "]");
}
}
使用DrawAPI接口创建一个抽象类Shape 。
Shape.java
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
创建实现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);
}
}
使用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();
}
}
验证输出。
Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[ color: green, radius: 10, x: 100, 100]