桥接模式-Bridge
名称:
桥接模式(Bridge Pattern)-对象结构型模式
问题:
Bridge pattern decouples an abstraction from its implementation so that the two can vary independently.
将抽象部分与它的实现部分分离,使它们都可以独立的变化。
适用性:
-你不希望在抽象和它的实现部分之间有一个固定的绑定关系。在程序运行时刻实现部分应可以被选择或者切换。
-类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对他们进行扩充。
-对一个抽象的实现部分修改对客户不产生影响,即客户的代码不必重新编译。
-你想对客户完全隐藏抽象的实现部分。
-如果有许多类的生成,造成嵌套的普化。
-想在多个对象间共享实现,但同时要求客户并不知道这一点。
协作:
Abstraction将client的请求转发给它的Implementor对象。
优点和缺点:
1、分离接口及其实现部分。有助于分层。
2、提高可扩充性。可以独立的对Abstraction和Implementor层次结构进行扩充。
3、实现细节对客户透明。
解决方案:
1、 模式的参与者
1、Abstraction
-定义抽象类的接口。
-维护一个指向Implementor类型对象的指针。
2、RefinedAbstraction
-扩充由Abstraction定义的接口。
3、Implementor
-定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这俩个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
4、ConcreteImplementor
-实现Implementor接口并定义它的具体实现。
2.实现方式
interface Implementor { public void OperationImpl(); }
class ConcreteImplementor implements Implementor { public void OperationImpl() { } }
abstract class Abstraction { protected Implementor imple; protected Abstraction(Implementor imple) { this.imple=imple; } public abstract void Operation(); }
class RefinedAbstraction extends Abstraction { protected RefinedAbstraction(Implementor imple) { super(imple); } public void Operation() { imple.OperationImpl(); } }
参考资料
《设计模式:可复用面向对象软件的基础》