适配器模式将一个类的接口,转换成客户期待的另一个接口,适配器让原本接口不兼容的类可以合作无间。
通俗的说,适配器就是连接两个不兼容类的中间件,使他们能够很好的结合在一起工作。
假设有一个系统要接到厂商提供的接口,但是系统接不上厂商提供的接口,所有就产生了适配器,使系统能间接接入到厂商提供的接口。如下图
有了适配器,现有系统跟厂商类就可以很好的兼容工作了,讲了那么多理论的东西。也是应该提供实例了。
我将用手机充电的列子来讲解。大家都知道手机充电需要的电压是5V,不过我们家庭中用的电压是220V,充电器就将220V的电压转化为5V给手机充电,所以充电器就相当于我们这个模式中的适配器。
package com.zengfeng.adapter;
//手机类
public class MobilePhone {
public void inputPower(V5Power v5power){
System.out.println("手机已经连接充电器");
//提供V5电源
v5power.getV5Power();
System.out.println("经过一段时间,手机充满电");
}
}
从上述代码可以看出,手机需要5V的电压充电
v5电压接口,相当于厂商提供的接口
package com.zengfeng.adapter;
//v5电压接口,提供 5V的电压方法
public interface V5Power {
//提供v5电源
void getV5Power();
}
220V电压类,相当于现有系统提供的接口
package com.zengfeng.adapter;
public class V220Power {
public void getV220Power(){
System.out.println("提供220v的电压");
}
}
因为220V和5V不匹配,所以要提供适配器匹配,适配器必须要实现厂商提供的接口,这里的适配器V220ToV5Adapter 实现 V5Power接口。
ackage com.zengfeng.adapter;
///将V220转化为V5的适配器,转化为目标,就要实现目标接口,并且提供转化的对象
public class V220ToV5Adapter implements V5Power {
//提供需要转化为目标的对象
private V220Power v220Power;
public V220ToV5Adapter(V220Power v220Power){
this.v220Power=v220Power;
}
//将v220电压转化成V5
@Override
public void getV5Power() {
v220Power.getV220Power();
System.out.println("经过一系列转化,将220V电压转化成5V进行充电");
}
}
好了,一切都准备就绪,接下来就要测试了。
package com.zengfeng.adapter;
public class PhoneApadterText {
public static void main(String[] args) {
MobilePhone phone =new MobilePhone();
//将v220转化为V5的适配器
V220ToV5Adapter v5=new V220ToV5Adapter(new V220Power());
phone.inputPower(v5);
}
}
测试结果
好了,经过上述讲解,大家应该都学会了这个模式。有了适配器以后,就不要修改现有系统的代码和厂商提供的代码。有什么不懂的话,可以留言。