- 介绍
适配器是将两个不兼容的类融合在一起。例如,经常碰到要在两个没有关系的类型之间进行交互,第一个解决方案是修改各自类的接口,但是如果没有源代码或者我们不愿意为了一个应用而修改各自的接口,此时我们往往会使用一个Adapter,在这两种接口之间创建一个“混血儿”接口,这个Adapter会将这两个接口进行兼容,在不修改原代码的情况下满足需求。 - 定义
适配器模式把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作 - 使用场景
(1)系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
(2)需要一个统一的输出接口,而输入端的类型不可预知。 - 适配器模式的类型
(1)类适配器模式
//Target角色
public interface FiveVolt{
public int getVolt5();
}
//需要被转换的对象
public class Volt220{
public int getVolt220(){
return 220;
}
}
//Adapter角色,将220V的电压转换成5V的电压
public class VoltAdapter extends Volt220 implements FiveVolt{
public int getVolt5(){
return 5;
}
}
public class Test{
public static void main(String[] args){
VoltAdapter adapter = new VoltAdapter();
System.out.println("输出电压:"+adapter.getVolt5());
}
(2)对象适配器模式(优于类适配器模式)
与类适配器模式一样,对象适配器模式把被适配的类的API转换成为目标类的API,与类适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类(被代理类),而是使用代理关系连接到Adaptee类。
//Target角色
public interface FiveVolt{
public int getVolt5();
}
//需要被转换的对象
public class Volt220{
public int getVolt220(){
return 220;
}
}
//Adapter角色,将220V的电压转换成5V的电压
public class VoltAdapter implements FiveVolt{
Volt220 mVolt220;
public VoltAdapter(Volt220 adaptee){
mVolt220 =a daptee;
}
public int getVolt220(){
mVolt220.getVolt220();
}
public int getVolt5(){
return 5;
}
}
public class Test{
public static void main(String[] args){
VoltAdapter adapter = new VoltAdapter();
System.out.println("输出电压:"+adapter.getVolt5());
}