桥接模式
1、解决什么问题?
桥接模式常用于多个类型组合变化问题,如商城商品分类问题。
假设电脑商城中销售电脑,电脑又分为台式、笔记本、平板,台式按照品牌划分,则分为联想台式机、戴尔台式机、神舟台式机,笔记本和平板也按照这三个品牌划分,结果如下图所示,这种划分方式也就是多继承。
若现在商城需要增加销售苹果品牌的台式机、笔记本、平板,则需要在增加苹果台式机、苹果笔记本、苹果平板三个类进行处理。如此一来则产生两个问题:
扩展麻烦:每次增加一个品牌就需要增加三个类,若增加N个品牌,则需要3N个类,扩展相当麻烦!
违反单一职责原则:一个方法只干一件事,一个类也应如此。若照上述设计,联想台式机类既负责联想品牌又负责台式机,因而违反单一职责原则。
为解决上述两问题,桥接模式应运而生。
2、什么是桥接模式?
桥接模式属于结构性模式。它基于类的单一职责原则,通过聚合将抽象部分与它的实现部分分离,使它们都可以独立地变化(各维度独立变化不影响其他维度)从而实现松散耦合,减少代码量。
3、UML图
桥接模式包含如下角色:
- Abstraction:抽象类(相当于电脑)
- RefinedAbstraction:扩充抽象类(相当于台式机、笔记本、平板)
- Implementor:实现类接口(相当于品牌)
- ConcreteImplementor:具体实现类(相当于联想、神舟、戴尔)
4、应用场景
- JDBC驱动
- AWT的peer架构