總結一下適配器模式
一、引言
適配器模式是啥?爲什麼要有適配模式?適配模式怎麼實現?
- 適配器模式是啥?將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
- 爲什麼要有適配器模式?例如買了個筆記本,充電需要20V電壓,但是衆所周知,我們國內電壓爲220V,因此需要個電源適配器來降壓。如此,適配器也是這種作用。
二、實現適配器模式
實現適配器有三種方式:
- 類適配器
- 對象適配器
- 接口適配器
1. 類適配器,如下類圖:
由上圖可知,適配器實現了適配器接口,同時繼承於220V電壓,我們是(Client)客戶端需要20V電壓,只需要向適配器拿即可。
代碼如下:
/**
* 220V電壓類
*/
public class V220 {
public void pop220(){
System.out.println("釋放了220V電壓");
}
}
//--------------------------------------------------------
/**
* 適配器接口
*/
public interface Adapter {
public void pop();
}
/**
* 適配器類
* 繼承於V220,同時實現適配器接口
*/
public class AdapterImpl extends V220 implements Adapter{
public void pop() {
super.pop220();
System.out.println("適配器接收220V電壓轉爲20V,輸出");
}
}
//-------------------------Main方法---------------------------
public static void main(String[] args) {
AdapterImpl adapter = new AdapterImpl();
//向適配器拿5V電壓
adapter.pop();
}
運行結果爲:
上面代碼很簡單,主要就是表達一種思想,如果調用不到想要的方法(pop220)可以用適配器中間加一層來調用。
不知道大家還是否記得設計模式七大原則——合成複用原則(說的是想要用一個類的方法,能用聚合就不要繼承)。
而我們在適配器中,適配器繼承了V220類,其實我們可以用聚合方式調用pop220方法。這種方式稱爲對象適配器。
2.對象適配器,如下類圖:
類圖和類適配器差不多,其實就是把繼承改爲聚合,減少耦合。
代碼如下:
/**
* 適配器類
* 實現適配器接口(去掉繼承轉爲聚合)
*/
public class AdapterImpl implements Adapter{
private V220 v220;
public AdapterImpl(V220 v220){
this.v220=v220;
}
public void pop() {
v220.pop220();
System.out.println("適配器接收220V電壓轉爲20V,輸出");
}
}
//-------------------------Main方法---------------------------
public static void main(String[] args) {
V220 v220 = new V220();//220V電壓
AdapterImpl adapter = new AdapterImpl(v220);//聚合方式傳入
//向適配器拿5V電壓
adapter.pop();
}
運行結果還是一樣,對象適配器和類適配器區別就在於類適配器是繼承調用,對象適配器是聚合調用。
3.接口適配器
接口適配器適用於一個接口有很多方法,但是根據需求不需要全部實現,即可用接口適配器,相當於滿足接口隔離原則。
類圖如下:
看圖很懵,現在我們來代碼實現以下:
/**
* 電壓接口(一共有3個方法)
*/
public interface Voltage {
public void V5();
public void V20();
public void V220();
}
//-------------------------------------------------------
/**
* 電壓抽象類(實現電壓接口)
* 這裏對接口方法作空實現
*/
public abstract class VoltageImpl implements Voltage {
public void V5() {
}
public void V20() {
}
public void V220() {
}
}
//----------------------------Main------------------------------
public static void main(String[] args) {
//對抽象類進行實現
VoltageImpl voltage = new VoltageImpl() {
public void V5() {
System.out.println("輸出5V電壓");
}
};
voltage.V5();//輸出5V
//--------------------------------------------------
//對抽象類進行實現
VoltageImpl voltage1 = new VoltageImpl() {
public void V20() {
System.out.println("輸出20V電壓");
}
};
voltage1.V20();
}
輸出結果爲:
以上可以看出,電壓接口一共有3個方法,我們寫一個抽象類實現它,然後對全部方法進行空實現,接着需要哪個方法就對抽象類進行實現就可以了,這就是接口隔離適配器。
三、結束
以上就是適配器的三種實現方式,每種都有對應的適用場景。