適配器模式是 將一個類的接口 轉換 成 客戶 需要的接口的一種模式。
來個類圖:
下面有個實例,我們中國的電壓是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
我覺得設計模式不是古板的東西,設計模式是一種思想,這個思想可以靈活變通。