面向对象的编程最终是为了提高模块内的内聚度,降低模块间的耦合度,bridge模式就是当我们在实现功能时,可能实现的方法种类很多,比如某一功能的实现是需要多种算法
的,或者某一模块的功能实现有的是在windows平台下,有的是在linux下的,最终的功能相同,但是实现的具体是不同的。这时候就需要bridge模式,将功能需求和实现分离开
来,直接向客户提供功能的是一个类,而其中保存了一个实现该功能的类的指针,通过实现功能类的指针来调用真正实现的代码:
也就是说Abstraction类中保留的是AbstractionImp类的指针,他可能指向的是ConcreteAbstractionImpA也可能是ConcreteAbstractionImpB,具体实例化的是哪一个实现的子类
根据情况而定,这是对象组合的典型应用而非对象继承!
1)Bridge模式和Strategy模式相似就是因为他们都将任务委托给了另外一个接口的具体实现,他们之间的区别在于Bridge的目的是让底层实现和上层接口可以分别演化,从而提高移植性而Strategy的目的是将复杂的算法封装起来,从而便于替换不同的算法。 2)以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别 开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。从结构图中可以看到,策略的结构是包容在桥接结构中的,桥接中必然存在着策略模式,Abstraction与Implementor之间就可以认为是策略模式,但是桥接模式一般Implementor将提供一系 列的成体系的操作,而且Implementor是具有状态和数据的静态结构。而且桥接模式Abstraction也可以独立变化。