在 GoF 的《设计模式》一书中,桥接模式被定义为:“将抽象和实现解耦,让它们可以独立变化。”定义中的“抽象”,指的并非“抽象类”或“接口”,而是被抽象出来的一套“类库”,它只包含骨架代码,真正的业务逻辑需要委派给定义中的“实现”来完成。而定义中的“实现”,也并非“接口的实现类”,而是一套独立的“类库”。
应用场景
系统可能有多个维度,每个维度都有可能变化。
类图
将 Color 类组合在 Shape 中来将形状和颜色解耦,各自维护各自的变化,这里体现了组合优于继承的设计原则。
桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
代码实现
Color
1 2 3 4 5
| public abstract class Color {
public abstract void paint(String shape);
}
|
Red
1 2 3 4 5 6 7 8
| public class Red extends Color {
@Override public void paint(String shape) { System.out.println("红色的" + shape); }
}
|
Green
1 2 3 4 5 6 7 8
| public class Green extends Color {
@Override public void paint(String shape) { System.out.println("绿色的" + shape); }
}
|
Shape
1 2 3 4 5 6 7 8 9 10 11
| public abstract class Shape {
protected Color color;
public void setColor(Color color) { this.color = color; }
public abstract void draw();
}
|
Circle
1 2 3 4 5 6 7 8
| public class Circle extends Shape {
@Override public void draw() { color.paint("圆形"); }
}
|
Square
1 2 3 4 5 6 7 8
| public class Square extends Shape {
@Override public void draw() { color.paint("正方形"); }
}
|
Main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Main {
public static void main(String[] args) { Shape shape; Color color;
color = new Red(); shape = new Circle(); shape.setColor(color); shape.draw();
color = new Green(); shape = new Square(); shape.setColor(color); shape.draw(); }
}
|
至此,我们已经完成了桥接模式的学习。桥接模式在实际项目中并不常用,这里我们了解认识即可。