设计模式-桥接模式
定义
将抽象部分与它的具体实现部分分离,使他们都可以独立的变化。通过组合的方式建立两个类之间的联系,而不是继承。
适用场景
- 抽象和具体实现之间增加更多的灵活性
- 一个类存在两个(或多个)独立变化的纬度,且这两个(或读个)纬度都需要进行独立的扩展。
- 不希望使用继承,或因为多继承导致系统类的个数剧增。
UML
- 在桥接模式结构图中包含如下几个角色:
- Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了 一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关 联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。
- RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。
- Implementor(实现类接口):定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多更复杂的操作。Implementor接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。
- ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现,在程序运行时,ConcreteImplementor对象将替换其父类对象,提供给抽象类具体的业务操作方法。
总结
- 优点
- 分离抽象部分及其具体实现部分。
- 提高了系统的可扩展性。
- 符合开闭原则。
- 符合合成复用原则。
- 缺点
- 增加了系统的设计与理解难度。
- 需要正确的识别出系统中两个独立变化的纬度。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 haominglfs的博客!