概述
将抽象和实现解耦,使得两者可以独立变化。
类图
角色
- 抽象化(Abstraction)角色
该角色抽象化的给出定义,并保存一个对实现化对象的引用。 - 实现化(Implementor)角色
该角色给出实现化角色的接口,但不给出具体的实现。 - 修正抽象化(RefinedAbstraction)角色
该角色扩展抽象化角色,它引用实现化绝角色并对抽象化角色进行修正。 - 具体实现化(ConcreteImplementor)角色
该角色对实现化角色接口中的方法进行具体实现。
示例
Implementor.java
1 | public interface Implementor{ |
ConcreteImplementor.java
1 | public class ConcreteImplementor implements Implementor{ |
Abstarction.java
1 | public class Abstraction { |
RefinedAbstraction.java
1 | public class RefinedAbstraction extends Abstraction{ |
Client.java
1 | public class Client{ |
应用
优点
- 抽象和实现分离是桥梁模式的主要特点,是为了解决继承的缺点而提出的设计模式。该模式下可以不接受抽象的约束,不用绑定在一个固定的抽象层次上。
- 实现对客户透明,客户端不用关心细节的实现,它已经由抽象层通过聚合关系完成封装。
- 提高灵活性和扩展性
使用场合
- 如果一个系统需要再构件的抽象化角色和具体角色之间增加更多的灵活性,避免在两层次之间建立静态的联系
- 设计要求实现化角色的任何改变不影响客户端,或者说实现化角色的改变对客户端完全透明。
- 一个构件有多于一个的抽象化角色和实现化角色,系统需要他们之间进行动态耦合。
- 不希望或不适合使用继承的场合。继承具有强入侵性质,即父类有的方法子类必须有;而桥梁模式是弱关联关系。