适配器模式是 将一个类的接口 转换 成 客户 需要的接口的一种模式。
来个类图:
下面有个实例,我们中国的电压是220V的,但是手机的电压很多是12V的,那手机需要进行充电,怎么办呢?来个电源适配器。
中国电源类:
/**
* 提供电源 - 中国电源
*/
public class ChinaElectricSource {
/**
* 提供电压 只能输出220V的电压
* @return
*/
public int offerV(){
return 220;
}
}
中国电源它只提供 220V的接口,但是手机需要的是12V的接口,中国电源不满足这个需求。
手机电源适配器类:
/**
* 提供电源 - 电源适配器
*/
public class PhoneElectricAdapter extends ChinaElectricSource{
/**
* 改造者
*/
private Adaptee adaptee = new Adaptee();
/**
* 提供12V电源
*/
public int offerV() {
return adaptee.offerV12(super.offerV());
}
}
电源适配器类中 继承了中国电源类,重写了offerV方法,需要保证提供的电压是12V的。这个12V是怎么实现的呢,是通过Adaptee改造者实现的。
改造者(被适配的对象)类:
/**
* 改造者
*/
public class Adaptee {
public int offerV12(int offerV){
System.out.println("提供的电压 "+offerV);
System.out.println("经过一序列 转换 转换成 12V了");
return 12;
}
}
这个改造者就是电源适配器的内部工作原理了。
来个测试:
public static void main(String[] args) {
System.out.println("*************手机需要充电 需要12V 的电源");
System.out.println("*************但是中国的电源额定电源为 220V");
ChinaElectricSource source = new PhoneElectricAdapter();
System.out.println("*************需要的电压 "+source.offerV());
}
测试结果:
*************手机需要充电 需要12V 的电源
*************但是中国的电源额定电源为 220V
提供的电压 220
经过一序列 转换 转换成 12V了
*************需要的电压 12
我觉得设计模式不是古板的东西,设计模式是一种思想,这个思想可以灵活变通。