模式定义:
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
定义可以知道我们的设配器模式能够解决不兼容的问题。
举个例子,家中电脑、电视机、手机的电源设备电压远远低于家用电线提供的220V电压,如何让家中设备能够接入家用电线呢?每个厂商就为自己的电源设备做设配了,使得家用设备能够在220V的电压下工作。
编程中的两种实现方式:对象适配器模式、类的适配器模式
1)对象适配器模式使用的是组合的形式
2)类的适配器模式使用的是继承的形式
简单的对象适配器模式的实现:本质上使用的是组合
定义一个输出电压220V的类Adapte,再定义一个目标适配5V电压的接口,由Adapter类实现,具体代码如下:
publicclassAdapterTest{publicstaticvoidmain(String[]args){Adapteradapter=newAdapter(newAdapte());inti=();("i="+i);}}classAdapte{publicintoutput220(){return220;}}interfaceTarget{intoutput5V();}classAdapterimplementsTarget{//AdapteprivateAdapteadapte;publicAdapter(Adapteadapte){=adapte;}@Overridepublicintoutput5V(){("对象的适配器模式");inti=();//(("原始电压:%dV,输出电压:%dV。",i,5));return5;}}运行结果如图:

简单的类的适配器模式实现:本质用的就是类的继承。
代码实现细节如下:
publicclassClassAdapterTest{publicstaticvoidmain(String[]args){Adapteradapter=newAdapter();();}}classAdapte{publicintoutput220(){return220;}}interfaceTarget{intoutput5V();}classAdapterextsAdapteimplementsTarget{@Overridepublicintoutput5V(){("类的适配器模式");inti=output220();//(("原始电压:%dV,输出电压:%dV。",i,5));return5;}}运行结果如图:

两者的区别:
类的适配器模式对我们的接口有污染,不符合迪米特原则(最少知道原则)

应用场景
1)当我们希望使用某些现有类,但其接口与我们的其它代码不兼容时,可以使用设配器模式
2)当我们希望重用几个现有的子类,这些子类缺少一些不能添加到超类中的公共功能,可以使用适配器模式。
优点:
1)符合单一职责原则
2)符合开闭原则
适配器模式在JDK和Spring源码中的应用:
JDK:
Spring: