桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
如何解决:把这种多角度分类分离出来,让它们独立变化,抽象类依赖实现类。
优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
代码实现
创建桥接实现接口。
public interface DrawAPI {
public void draw(String des);
}
创建实现了 DrawAPI 接口的实体桥接实现类。
public class Red implements DrawAPI {
@Override
public void draw(String des) {
System.out.println("color: Red, Shape: " + des);
}
}
public class Green implements DrawAPI {
@Override
public void draw(String des) {
System.out.println("color: Green, Shape: " + des);
}
}
使用 DrawAPI 接口创建抽象类 Shape。
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
创建实现了 Shape 抽象类的实体类。
public class Square extends Shape {
private String Square;
public Square(String Square, DrawAPI drawAPI) {
super(drawAPI);
this.Square = Square;
}
public void draw() {
drawAPI.draw(Square);
}
}
public class Circle extends Shape {
private String circle;
public Circle(String circle, DrawAPI drawAPI) {
super(drawAPI);
this.circle = circle;
}
public void draw() {
drawAPI.draw(circle);
}
}
使用 Shape 和 DrawAPI 类画出不同颜色的圆。
public class Main {
public static void main(String[] args) {
Shape redCircle = new Circle("circle", new Red());
Shape greenSquare = new Square("square", new Green());
redCircle.draw();
greenSquare.draw();
}
}