桥接模式(Bridge Pattern)

意图

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

动机

当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同方式加以实现。

但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。

适用性

以下一些情况使用Bridge模式:

参与者

协作

Abstraction将client的请求转发给它的Implementor对象。

优点

使用场景

效果

Bridge模式有以下一些优点:

  1. 分离接口及其实现部分

    一个实现未必不变地绑定在一个接口上。抽象类的实现可以在运行时刻进行配置,一个对象甚至可以在运行时刻改变它的实现。

    将Abstraction与Implementor分离有助于降低对实现部分编译时刻的依赖性,当改变一个实现类时,并不需要重新编译Abstraction类和它的客户程序。为了保证一个类库的不同版本之间的二进制兼容性,一定要有这个性质。

    另外,接口与实现分离有助于分层,从而产生更好的结构化系统,系统的高层部分仅需知道Abstraction和Implementor即可。

  2. 提高可扩充性

    你可以独立地对Abstraction和Implementor层次结构进行扩充。

  3. 实现细节对客户透明

    你可以对客户隐藏实现细节,例如共享Implementor对象以及相应的引用计数机制(如果有的话)。

示例一:通用源代码

1565612018171

1565695371156

示例二:手机品牌之紧耦合程序

1565695886859

1565695455117

示例三:手机品牌之松耦合程序

1565695914170

1565695327762

示例四:手机品牌之桥接模式

1565695978673