结构型: 桥接模式

处理多维度变化

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们可以独立变化。

如果某个类存在两个独立变化的维度,可以将这两个维度分离出来,使两者可以独立扩展,将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似连接的桥。

将两个独立的维度称为抽象部分和实现部分,每个维度都可以有其具体的实现类进行扩展,但是维度之间通过关联关系连接。

桥接模式是JVM和JDBC实现的核心模式之一。

  1. 优点
    • 分离抽象接口及其实现部分。
    • 桥接模式可以取代多层继承方案,多层继承方案违背了“单一原则”,复用性较差。
    • 提供了系统的可扩展性,任意维度都可以扩展,符合“开闭原则”。
  2. 缺点
    • 关联关系建立在抽象层,需要一开始针对抽象层进行设计。
    • 需要正确识别系统中独立变化的维度。
  3. 适用场景
    • 增加抽象化和具体化之间的灵活性。
    • 抽象部分和实现部分可以以继承的方式独立扩展互不影响。

1
2
3
4
5
6
7
8
9
10
public abstract class AbstractPen {
protected AbstractColor abstractColor;
public void write(){
}
public void setAbstractColor(AbstractColor abstractColor) {
this.abstractColor = abstractColor;
}
}
1
2
3
4
5
public abstract class AbstractColor {
public void color(){
}
}
1
2
3
4
5
6
7
8
public class ApplePen extends AbstractPen {
@Override
public void write() {
// do sth
abstractColor.color();
}
}
1
2
3
4
5
6
7
8
public class BananaPen extends AbstractPen {
@Override
public void write() {
// do sth
abstractColor.color();
}
}
1
2
3
4
5
6
7
public class Green extends AbstractColor {
@Override
public void color() {
// green
}
}
1
2
3
4
5
6
7
public class Red extends AbstractColor {
@Override
public void color() {
// red
}
}