桥接模式
- 处理多层继承结构存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。
- 如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。
- 与多层继承结构不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名之为桥接模式。
- 定义:将抽象部分与其实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
桥接模式结构
- 代码实现框架
在具体编码实现时,由于在桥接模式中存在两个独立变化的维度,为了使两者之间耦合度降低,首先需要针对不同的维度提取抽象类和实现类接口,并建立一个抽象关联关系。
interface Implementor {
public void operationImpl();
}
abstract class Abstraction {
protected Implementor impl;
public void setImpl(Implementor impl) {
this.impl = impl;
}
public abstract void operation();
}
class RefinedAbstraction extends Abstraction {
public void operation() {
impl.operation();
}
}
class ConcreteImplementor implements Implementor {
public void operationImpl() {
}
}
桥接模式与适配器模式的联用
- 桥接模式与适配器模式用于设计的不同阶段。桥接模式用于系统的初步设计,对于存在两个独立变化维度的类可以将其分为抽象类和实现类两个角色,使它们分别进行变化。
- 在系统初步设计之后,如果发现系统与已有类无法协同工作时,可以采用适配器模式。
总结
- 桥接模式是设计java虚拟机与实现JDBC等驱动程序的核心模式之一。
- 如果一个类或一个系统存在多个变化维度,可以考虑采用桥接模式。
- 优点:
- 分离抽象接口及其实现部分,使得抽象和实现可以沿着各自的维度进行变化。
- 桥接模式可以取代多层继承方案。
- 桥接模式提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,符合开闭原则。
- 缺点
- 增加了系统的理解和设计难度。
- 如何正确识别两个独立维度也需要一定的经验积累。