介绍
适配器模式在开发中使用频率很高,那么何为适配器呢?适配器就是将两个不兼容的类融合到一起,或者说将两种不同的东西通过转换使得它们可以相互协作起来。比如生活中的手机充电器,家用电压220V,手机充电只需用到5v,那么手机充电器就是把220v装换为手机合适使用的电压来进行充电,手机充电器就是一个电源适配器。
定义
适配器模式把一个类的接口变成客户端所期待的另一种接口,从而使得原本因接口不匹配而无法工作在一起的两个类能够工作在一起。
类图
角色介绍:
- Target — 目标角色,也就是期待得到的接口。
- Adaptee — 现在需要适配的接口。
- Adapter — 适配器角色。
简单示例
以手机充电器为例,首先我们定义目标电压5V接口:
5V电压,Target角色
public interface Volt5 {
int getVolt5();//获得5V电压
}
Target角色给出了需要的目标接口,这里对应的Target的目标是获得5V输出电压。我们再定义一个需要转换的家用电压:
220V电压,Adaptee角色
public class Volt220 {
public int getVolt220(){
return 220;
}
}
Adaptee角色是要转换成Target的,家用电压是220V,需要转换成5V,此时就需要电源适配器进行这个过程,我们再定义一个电源适配器:
手机充电器,即Adapter角色
public class PhoneAdapter implements Volt5 {
private Volt220 mVolt220;
public PhoneAdapter(Volt220 volt220) {
mVolt220 = volt220;
}
public int getVolt220(){
return mVolt220.getVolt220();
}
@Override
public int getVolt5() {
return 5;
}
}
Adapter角色需要实现Target接口,获得我们所需要的电压,Adapter还包装了Adaptee,并通过组合的方式获得了Adaptee的Api。下面我们来看一下如何使用:
public class Test {
public static void main(String[] args){
PhoneAdapter phoneAdapter = new PhoneAdapter(new Volt220());
System.out.println("输出电压:" + phoneAdapter.getVolt5());
}
}
输出结果很简单就不再给出。可以看到适配器模式还是很简单的,就是在两个不兼容的接口之间加一个适配器来进行接口转换。
结语
以上只是适配模式的经典实现,将原本不兼容的接口融合在一起,在实际开发中也可以有灵活的应用,比如输入有无数种类型,但是输出的类型是统一的,就可以通过Adapter返回一个统一的输出,而具体的输入就留给用户处理,内部只要知道输出的是符合的类型即可。
本文相关源码