场景分析(如图)
定义及本质
定义:把一个类的接口转换成客户端所期待的另一个接口,从而将原来接口不匹配而不能一起工作的两个类匹配在一起工作,使之达到已有对象的功能被复用的目的。
本质:转换匹配,复用功能。
类适配器与对象适配器
类适配器:采用对象继承方式,是静态的定义方式;
对象适配器:采用对象组合方式,是动态组合的方式;
两者比较:
1)子类处理:类适配器:一个Adapter只有一个Adaptee,不能再去处理Adaptee的子类;对象适配器:允许一个Adapter有多个Adaptee;
2)重新定义行为:类适配器:可以重定义Adaptee的行为,子类覆盖父类的部分实现方法;对象适配器:不能重新定义Adaptee的行为;
3)对象的引用:类适配器:不需要额外引用Adaptee接口;对象适配器:需要额外引用得到Adaptee对象;
(1)类适配器
(2)对象适配器
UML类图
调用时序图
优缺点
(1)优点
提高类的复用性:如果想使用现有的类所提供的功能,而此类的接口又不符合现有系统的需要。通过适配器模式就可以让这些功能得到更好的复用。
扩展性:在实现适配器的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
(2)缺点
过多使用会导致系统零散混乱,不容易整体掌控。如:调用A适配成B。
(3)使用注意
适配器模式属于补偿模式,专门用来在系统后期扩展、修改时使用,但要注意不要过度使用适配器模式。