设计模式04——适配器模式、桥梁模式
适配器模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
上图中Adaptor继承Adaptee类,这是类的适配器模式。而对象的适配器模式是通过委派实现的,即Adaptor引用Adaptee
特殊情况:在缺省适配器模式下,Adaptor可以是抽象类。java.awt库中,WindowAdaptor、MouseAdaptor、WindowListener、MouseListener等,很多类都是缺省适配器类
应用示例:JDBC-ODBC驱动器(JDBC的库不可能和ODBC的库有相同的接口,因此使用适配器模式将ODBC的API接口改为JDBC的接口是唯一可行的方法)
桥梁模式
桥梁模式的用意是将抽象化与实现化脱耦,使得二者可以独立地变化
这个系统含有两个等级结构:
- 由抽象化角色和修正抽象化角色组成的抽象化等级结构。
- 由实现化角色和两个具体实现化角色所组成的实现化等级结构。
桥梁模式涉及的角色有:
- 抽象化角色(Abstraction):抽象化给出的定义,并保存一个对实现化对象的引用。
- 修正抽象化角色(RefineAbstraction):拓展抽象化角色,改变和修正父类对抽象化的定义。
- 实现化角色(Implementor):这个角色给出实现化角色的接口,但是不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
- 具体实现化角色(ConcreteImplementor):这个角色给出实现化角色接口的具体实现。
优点:
1、桥梁模式分离了抽象部分和实现部分,从而极大的提高了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
2、更好的扩展性:桥梁模式使得抽象部分和实现部分可以分别独立的扩展,而不会相互影响,从而大大提高了系统的可扩展性。
应用场景:JDBC驱动器