Bridge模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。Bridge模式创建了两个分离的类层次,目的就是允许分离的类层次一起工作,即使它们是独立演化的。
类图:
示例:画几何图形,可以是不同的形状如圆和正方形,每种形状可以是不同的颜色,也就是几何图形有两个不同的变化维度。
如果用单个类层级的设计,每增加一种几何图形,都需要对应增加这种几何图形不同颜色的子类,如图:
解决方案:
抽取一个变化的维度到一个独立的类继承体系,作为Implementer, 原来的类引用这个类层次的对象,如图:
抽象的类层次
public interface Shape {
void draw();
}
public Circle implements Shape {
private Color color;
public Circle(Color color) {
this.color = color;
}
public void draw() {
color.drawColor();
}
}
public Square implements Shape {
private Color color;
public Square(Color color) {
this.color = color;
}
public void draw() {
color.drawColor();
}
}
实现的类继承层级
public interface Color {
void drawColor();
}
public Blue implements Color {
public void drawColor() {
System.out.println("Drawing in blue");
}
}
public Red implements Color {
public void drawColor() {
System.out.println("Drawing in red");
}
}
测试
public class BridgePatternTest {
public static void main(String[] args) {
Shape circle = new Circle(new Blue());
circle.draw();
}
}