一、概述
适配器模式中有一个被称为适配器(Adapter)的包装类,其包装的对象称为适配者(Adaptee),当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,此过程对客户类是透明的。
适配器模式的定义为:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
对象适配器模式结构图:

二、示例代码
对象适配器模式包含目标抽象类(Target)、适配器类(Adapter)、以及适配者类(Adaptee)。适配器类与适配者类是关联关系(也称为委派关系)。典型的对象适配器模式代码如下:
1 | public class Adapter extends Target { |
三、demo
已有一套加密方法,在不改变现有类的基础上重用第三方加密方法。
目标抽象类(Target)设计如下:
1 | public abstract class DataOperation { |
适配者类(Adaptee)设计如下:
1 | public class NewCipher { |
适配器类(Adapter)设计如下:
1 | public class NewCipherAdapter extends DataOperation{ |
客户端调用为:
1 | public static void main(String args[]) { |
运行结果为:

四、总结
1. 优点
- 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
- 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。
- 一个对象适配器可以把多个不同的适配者适配到同一个目标;
- 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者的子类也可通过该适配器进行适配。
2. 缺点
- 在适配器中置换适配者类的某些方法比较麻烦,如果一定要置换掉适配者类的一个或多个方法,可以先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。
3. 适用场景
- 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码。
- 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。