本人为菜鸟,仅供参考,只为自己记录学习
优点
1、可以让任何两个没有关联的类一起运行
2、提高了类的复用
3、增加了类的透明度
4、灵活性好
缺点
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构
2、由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类
电源接口
public interface Provide {
/**
* 获取电源的电压 源接口 输出电压
* @return
*/
public int getVoltage();
}
电源实现类
public class ChProvide implements Provide {
@Override
public int getVoltage() {
return 220;
}
}
public class JaProvide implements Provide {
@Override
public int getVoltage() {
return 110;
}
}
手机接口
public interface Target {
/**
* 目标接口 输入电压
* @param voltage
*/
public void getVoltage(int voltage);
}
手机实现类
public class VivoPhone implements Target {
public final int needVoltage = 11;
@Override
public void getVoltage(int voltage) {
if(voltage == needVoltage) {
System.out.println("正在高速充电!");
} else {
System.out.println("充电器不匹配,要爆炸了!");
}
}
}
适配类
public class ChVivoAdapter {
/**
* 需要适配的对象
*/
private Provide source;
public ChVivoAdapter(Provide provide) {
this.source = provide;
}
public int outVoltage() {
return source.getVoltage() / 20;
}
}
public class JaVivoAdapter {
/**
* 需要适配的对象
*/
private Provide source;
public JaVivoAdapter(Provide provide) {
this.source = provide;
}
public int outVoltage() {
return source.getVoltage() / 10;
}
}
测试用例
public class AdapterTest {
public static void main(String[] args) {
VivoPhone vivoPhone = new VivoPhone();
ChVivoAdapter chVivoAdapter = new ChVivoAdapter(new ChProvide());
vivoPhone.getVoltage(chVivoAdapter.outVoltage());
JaVivoAdapter jaVivoAdapter = new JaVivoAdapter(new JaProvide());
vivoPhone.getVoltage(jaVivoAdapter.outVoltage());
}
}
结果
正在高速充电!
正在高速充电!