适配器模式一般用于接口转换,文中以英式中式插头转换为例创建demo。
适配器模式分以下两种:对象适配器和类适配器
对象适配器:
以聚合方式实现
package adapter;
public interface EnglishPlug {
void charge();
}
package adapter;
public class EnglishPlugImpl implements EnglishPlug{
@Override
public void charge() {
System.out.println("使用英式插头充电");
}
}
package adapter;
public interface Plug {
void chargeElectricity();
}
package adapter;
public class ObjectAdapter implements Plug{
private EnglishPlug englishPlug;
public ObjectAdapter(EnglishPlug englishPlug) {
super();
this.englishPlug = englishPlug;
}
@Override
public void chargeElectricity() {
System.out.println("对象适配器转换为中式插头");
englishPlug.charge();
}
}
package adapter;
public class Client {
public static void main(String[] args) {
//对象适配器
EnglishPlug englishPlug=new EnglishPlugImpl();
Plug objectAdapter=new ObjectAdapter(englishPlug);
objectAdapter.chargeElectricity();
//类适配器
Plug clazzAdapter=new ClazzAdapter();
clazzAdapter.chargeElectricity();
}
}
类适配器:
以继承方式实现
package adapter;
public class ClazzAdapter extends EnglishPlugImpl implements Plug{
@Override
public void chargeElectricity() {
System.out.println("类适配器转换为中式插头");
super.charge();
}
}
打印结果:
对象适配器转换为中式插头
使用英式插头充电
类适配器转换为中式插头
使用英式插头充电
小结:
1.对象适配器比类适配器好,因为更灵活。一般多用聚合,少用继承;
2.对象适配器和代理模式的uml图很像但是有一点区别。适配器模式的Adapter是有一个上层接口的,而代理模式的Proxy则没有。代理模式
3.在工作中,A系统通过X接口与B系统对接,由于B系统改造,B系统重新开发了一套接口与A系统对接,但同时又保持原有逻辑不变,此时,A系统可以开发一个适配器Y将B系统的新接口对接到A的原有接口X。