定義
適配器模式把一個類的接口變換成客戶端所期待的另外一種接口,從而使原本因為接口不匹配而無法一起工作的倆個類能夠在一起工作。
使用場景
- 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要,即接口不兼容。
- 想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的類一起工作。
- 需要一個統(tǒng)一的輸出接口,而輸入端的類型不可預知。
UML圖

適配器模式.png

解釋
優(yōu)點
- 更好的復用性
系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。那么通過適配器模式可以讓這些功能得到更好的復用 - 更好的擴展性
在實現(xiàn)適配器功能的時候,可以調(diào)用自己開發(fā)的功能。從而自然的擴展系統(tǒng)的功能
缺點
- 過多的使用適配器,會讓系統(tǒng)非常凌亂,不易整體把握。例如,明明看到調(diào)用的是A接口,其實內(nèi)部被適配成了B接口的實現(xiàn),一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災難。因此,如果不是很有必要,可以使用適配器,而是對系統(tǒng)進行重構(gòu)。
例子
將220V交流電轉(zhuǎn)換為5V的直流電壓,
- 被轉(zhuǎn)換的原始對象
/** Adaptee角色,需要被裝換的對象
* Created by Niwa on 2017/8/2.
*/
public class Volt220 {
public int getVolt220(){
return 220;
}
}
- 需要轉(zhuǎn)換成的目標角色,5V直流
/** Target角色
* Created by Niwa on 2017/8/2.
*/
public interface FiveVolt {
int getVolt5();
}
- 適配器
/** Adapter角色,將220v的電壓裝換成5v的電壓
* Created by Niwa on 2017/8/2.
*/
public class VoltAdapter extends Volt220 implements FiveVolt{
@Override
public int getVolt5() {
return 5;
}
}
關(guān)鍵點在這里,通過實現(xiàn)要轉(zhuǎn)換成的目標接口,和繼承原始類實現(xiàn)接口轉(zhuǎn)換
- 測試類
/** 測試類
* Created by Niwa on 2017/8/2.
*/
public class Client {
public static void main(String[] args){
VoltAdapter voltAdapter = new VoltAdapter();
System.out.println("輸出電壓:" + voltAdapter.getVolt5());
}
}
輸出結(jié)果:
輸出電壓:5
源代碼:DesignPattern
參考:
《Android源碼設計模式解析與實戰(zhàn)讀書》
各大佬博客
end