Bridge模式学习笔记
??? 适用情况:当抽象本身有很复杂的层次结构(继承关系),如果你继续用“继承”来实现这些抽象的话,那每一种实现都要继承抽象层次结构中的每一个分支,同时当抽象层次分支增加时,你又要为新增的分支“继承”每一种不同的实现。所以你希望抽象与实现完全分开,他们都可以有自己的层次结构。同时实现之间的转换对系统来说是透明的。
?
??? 解决方案:在顶层的抽象类中包含一个顶层实现类的引用。通过将功能委派给这个引用来实现抽象类的功能。在不同的实现之间切换时,只需要变更这个引用所指向的具体实现就行了。
??? 类图:
?
?
? GOF中的例子:
?
??
?? 实际应用:其实很典型(完全符合定义类图的)的应用很少。Bridge模式可以看成将抽象与实现分离的另一种方式:组合(composite)而不继承。其实Bridge模式要比继承更灵活。实现类中的接口并不需要符合抽象类的接口,只要其提供的功能是抽象类需要的,抽象类(包括它的子类)可以通过实现类接口的组合调用实现。比较牵强的例子有AWT中的Componet都是通过ToolKit桥接到ComponentPeer实现的。但它并不典型,Compoent与ComponentPeer的层次结构是一一对应的。同样的一个并不典型的例子是JDBC中的API通过DriverManager桥接到具体的Driver实现,但JDBC对应的某个类其并没有复杂的子类结构,它只是被应用程序调用而已。
?
?? 与其它设计模式的比较:TBD