n 类的抽象以及他的实现都应该可以通过生成子类的方法加以扩充。
n 如果任何一种扩展都会导致类以几何级数来增长,这就说明你需要将一个对象分解为两个部分,这种类层次称为“嵌套的普化 nested generalizations”;
l 一般来讲,Implementor只提供一些基本操作,而Abastraction则定义了一些基于这些基本操作的较高层次的操作。
l Bridge Pattern的优点:
n 是的接口与实现分离,一个抽象类的实现可以在运行时刻进行配置,一个对象甚至可以在运行时刻改变他的实现。
n 提高括扩充性:你可以单独对Abstraction或Implementor的类层次进行扩充。
n 实现细节对客户透明,你可以完全对客户隐藏细节。在c++中,implementor类的类接口可以在一个似有的头文件中定义,这个文件不提供给客户,这样你就可以对客户彻底的隐藏了一个类的实现部分。
l 实现
n 有一种特殊的情况是只有一个Implementor类,这是bridge的一种退化。
n Abstraction有三种方法来创建implementor;
u Abstraction知道所有的concreteImplementor,所以就在自己的构造器中创建implementor;
u Abstraction创建一个默认的implementor,然后根据需要改变这个实现;
u 引入factory,这样Abstraction就不需要知道任何具体的implementor。我推荐使用这样的方法。
图1 桥接模式的典型结构
关于p106中提到的Set, LinkedSet, HashSet和LinkedList, HashTable的关系,书中说是一种退化的桥接,我也可以说这是一种Adapter,我们可以来看两者的类结果对比,见图2和图3。通过对比,我们可以发现,p106的应用只是子类的实现多一些,相当于有多个Adapter。
作者这么说也是队的,Bridge和Adapter本身就是相似的。
图2 适配器模式的典型结构