设计模式之适配器模式(六)
结构型模式
结构型模式描述如何将类或对象按某种组合组成更大的结构。它分为类结构型模式和对象结构型模式,类结构型模式关心类之间的组合,一般只存在继承关系和实现关系,对象结构型模式关心类与对象的组合,通过关联关系,使得在一个类中声明另一个类的实例对象,然后通过该对象调用其方法。结构型模式有七种:适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式。
适配器模式
定义
Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。就像生活中的万能充、数据线、笔记本的转换头等,都是为了兼容各种不同的设备。根据适配器类和适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器和适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承或实现关系。
结构类图
类适配器类图:
对象适配器类图:
适配器模式一般包含如下角色:
1、Target:目标角色,客户所期待的接口。目标角色可以是具体的或抽象的类,也可以是接口
public interface Target {
/**
* 目标抽象类定义的方法
*/
void request();
}
2、Adaptee:适配者类,源角色。已有接口,但是和客户所期待的接口不兼容。
public class Adaptee {
public void method() {
System.out.println("adaptee method execute!");
}
}
3、Adapter:适配器类,把源角色转化为目标角色
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
super.method();
}
}
优点
1、灵活性和扩展性强
不需要修改原有代码,引入适配器可以将多个没有任何关系的适配者适配到目标角色中
2、提高了类的复用性和透明性
客户端访问目标角色时,根据不同的需求,适配器会委托给相应适配者,对于上层模块是透明的。通过适配器的包装,减少大量重复的重复开发,让功能得到更好的复用
应用场景
1、接口转换,将一个接口转换成系统所需的另一个接口
2、系统需要使用现有的类,但此类的接口不兼容而不能在一起工作
3、当有需求去修改已经投产中的接口
4、多种差异化类型的接⼝做统⼀输出
模式扩展
类适配器:指的是适配器Adapter继承于适配者Adaptee,并实现目标接口Target。由于Java中是单继承,所以这个适配器仅仅只能服务于所继承的被适配者Adaptee。
对象适配器:指的是适配器实现目标接口时,通过对象层次的关联关系进行委托,而不是继承关系。
对象适配器和类适配器的区别是:类适配器是类间继承,对象适配器是对象的关联关系。
总结
适配器模式更多的是一种补偿模式,它不是为了解决开发设计阶段的问题,而是应用于功能扩展中。通常来解决接口不兼容的问题。核心就是"把一个类的接口转换成客户端所期待的另一种接口"。