0%

桥接模式

桥接模式

桥接是一种结构型设计模式, 可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发。

问题

当一个类有多个维度的特性,如果仅通过继承的方式生成子类会生成大量的子类,还不容易对其中某个特性进行扩展,因为这会需要修改相关的大量的类。

比如一个物品有形状和颜色两个维度的特性,如果颜色有红色和蓝色,形状有方形和球形,这就对应了四个子类。如果新增一个黄色那就需要新增两个类(黄色方形、黄色球形),如果这时候形状再增加一种三角形,那么就需要再新增三个类(红色三角形, 蓝色三角形,黄色三角形)。这还只是2个维度的,如果维度更多类的数量会非常多,并且呈指数增长。

解决方案

桥接模式改用聚合的关系去替代继承的关系,使特性成为一个相对独立的类层次,特性的种类扩充不再对初始类产生大的影响。这里的特性为认为去抽象出来的,不一定是这个类的某个具体的参数,也可以是某种操作或行为。

桥接模式在定义中将整个系统分为抽象和实现两个部分,这里的抽象与接口和抽象类无关。

抽象部分(也被称为接口) 是一些实体的高阶控制层。 该层自身不完成任何具体的工作, 它需要将工作委派给实现部分层 (也被称为平台)。

桥接模式更偏向于指导对程序整体结构的思考而不是具体的类的组织形式。

优点

  1. 抽象和实现的分离。

  2. 优秀的扩展能力。

  3. 实现细节对客户透明。

缺点

  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

模式结构图

实例

完整代码地址

1
2
3
4
5
6
7
8
9
10
public abstract class Pen {
protected DrawAPI drawAPI;

public Pen(DrawAPI drawAPI) {
this.drawAPI = drawAPI;
}

public abstract void draw();

}