適配器模式
適配器模式屬於結構型模式,這個模式將一個類的接口轉換成客戶希望的另外的一個接口。該模式使得原本兩個不兼容的接口可以一起工作。
適配器模式適用於希望利用已經存在的功能,但是接口又和已經存在的功能不適配的情況。例如對於電源來說,假設現在有兩種電源接口,一種輸出電壓是220V,另一種是110V的。現在只有220V的電源,怎麼給110V的電器充電呢?此時可以利用電源適配器將220V的電壓轉換爲110V的,這種其實就是利用了適配器模式的思想。
UML類圖
如圖所示,InterfaceOf110V
是110V電壓電源的接口,InterfaceOf220V
是220V電壓電源的接口, VoltageAdapter
是將220V電壓電源轉換爲110V電壓電源的適配器。接下來看具體代碼實現:
代碼實現
110V電壓電源接口-InterfaceOf110V
/**
* <p>文件描述: 110V電壓接口</p>
*
* @Author luanmousheng
* @Date 17/7/11 下午2:38
*/
public interface InterfaceOf110V {
/**
* 通過110V電壓充電
*/
void chargeWith110V();
}
220V電壓電源接口-InterfaceOf220V
/**
* <p>文件描述: 220V電壓接口</p>
*
* @Author luanmousheng
* @Date 17/7/11 下午2:36
*/
public interface InterfaceOf220V {
/**
* 通過220V電壓充電
*/
void chargeWith220V();
}
220V電壓電源接口的實現-標準電壓電源
/**
* <p>文件描述: 標準電壓(220V)</p>
*
* @Author luanmousheng
* @Date 17/7/11 下午2:44
*/
public class StandardVoltage implements InterfaceOf220V{
@Override
public void chargeWith220V() {
System.out.println("標準220V充電");
}
}
電源電壓適配器-VoltageAdapter
/**
* <p>文件描述: 電壓適配器</p>
*
* @Author luanmousheng
* @Date 17/7/11 下午3:02
*/
public class VoltageAdapter implements InterfaceOf110V {
//需要適配的對象
private InterfaceOf220V standardVoltage = new StandardVoltage();
@Override
public void chargeWith110V() {
//將調用適配到standardVoltage
standardVoltage.chargeWith220V();
System.out.println("適配器處理:適配220V到110V");
}
}
適配器模式Demo
/**
* <p>文件描述: 適配器Demo</p>
*
* @Author luanmousheng
* @Date 17/7/11 下午3:05
*/
public class AdapterPatternDemo {
public static void main(String[] args) {
InterfaceOf110V interfaceOf110V = new VoltageAdapter();
interfaceOf110V.chargeWith110V();
}
}
Demo轉出爲:
標準220V充電
適配器處理:適配220V到110V
該例中原本110V和220V的電壓電源是不兼容的,適配器模式利用了已經存在的接口(220V電壓電源),複用已經存在的功能,適配器做的功能是將調用轉到已經存在的功能上去。