1.概述
将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的兼容性问题。
示例:生活中的适配器(即充电器),将220v的交流电转换为手机可以接受的直流电。
2.分类
a.类的适配器模式
当希望一个类转换成满足另一个新接口的类时,可以创建一个适配器类,持有原有类的一个实例,在适配器类的方法中,调用实例的方法就行。
b.对象的适配器模式
当希望一个对象转换成满足另一个新接口的对象时,可以创建一个适配器类,持有原有类的一个实例,在适配器类的方法中,调用实例的方法就行。
c.接口的适配器模式
当不希望实现一个接口中的所有方法时,可以创建一个抽象类,空实现所有接口方法,当我们要使用该接口的某一个方法时直接继承抽象类即可。
应用实例:生活中的手机适配器(即充电器),将220v的交流电转换为手机可以接受的直流电。
Target.java
package demo_adapter01;
//目标接口:220v交流电
public interface Target {
public void request();
}
TargetImpl.java
package demo_adapter01;
//目标接口的实现类:220v交流电
public class TargetImpl implements Target{
@Override
public void request() {
System.out.println("手机将接收220v交流电");
}
}
Adapatee.java
package demo_adapter01;
//被适配类:手机可以使用的直流电
public class Adapatee {
public void adapterRequest() {
System.out.println("手机将接收其可以使用的直流电");
}
}
Adapater.java
package demo_adapter01;
//适配器类:将220v交流电转换为手机可以使用的直流电
//继承被适配类且实现目标类的接口
public class Adapater extends Adapatee implements Target{
@Override
//在目标接口类的方法中调用被适配者的方法
public void request() {
super.adapterRequest();
}
}
Test.java
package demo_adapter01;
public class Test {
public static void main(String[] args) {
//1.正常使用目标类的方法
Target target=new TargetImpl();
System.out.println("若不使用适配器去给手机充电!");
target.request();
//2.通过适配器类来使用目标类的方法
Target targetAdapater=new Adapater();
System.out.println("使用适配器去给手机充电!");
targetAdapater.request();
}
}
运行结果图