1 前言
桥接模式是结构性模式中非常重要的一个模式,使用也比较广泛。因此有必要重点掌握
2 桥接模式简介
一般来说,对于抽象,我们是定义接口或者抽象类,而对于实现往往会继承抽象或者接口。但是此种方式不够灵活,继承是侵入式的,使得难以对抽象部分和实现部分进行单独的修改和演进。
另外,继承使得实现部分中有抽象部分,使得实现部分的冗余性比较重。
桥接模式就是为解决此问题而生的,桥接模式主要是将抽象部分与实现部分进行分离,使其可以分别的进行演进和变化。
定义: 将系统的抽象部分与实现部分分离,使它可以独立地变化
UML:
Abstraction是系统的抽象部分,一般是系统对外提供的接口的类,它引用了Implementor接口实现的类,因此往往会把抽象接口中的请求转到这个实现类的接口中,例如会在oper()中调用Implementor的operImpl()。
RefinedAbstraction是抽象系统的子类,用于不同的客户需求,同理,ConcreteImplementorA是Implementor接口实现的一个子类。
适用场景:
1 抽象和实现之间不想有固定的绑定关系,例如想运行时加载(运行时注入)
2 类的抽象和它的实现都可以通过生成子类的方法加以扩充
3 对一个系统抽象部分的修改不对客户产生影响(因为不修改实现部分)
4 多个对象间想共享某个实现
示例:
暂时没找到合适的例子,下次补上吧
注意事项:
1 分离接口与实现部分,一个实现未必不变的绑定在一个接口上
2 仅有一个Implementor时没有必要定义成抽象形式
3 创建正确切合理的Implementor的对象及继承体系,这一点可以参考其他设计模式