android設計模式——介面卡模式
阿新 • • 發佈:2018-11-06
定義:介面卡模式就是把一個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配的而無法工作的兩個類能夠一起工作
使用場景:
- 系統要使用現有的類,但此類的介面不符合系統的需要,即介面不相容。
- 想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關係的一些類,包括一些可能在將來引進的類一起工作
- 需要一個統一的輸出介面,而輸入端的類的型別不可預知
應用舉例:美國電器 110V,中國 220V,就要有一個介面卡將 110V 轉化為 220V。
類圖:
- Traget,目標角色,也就是所期待的介面
- Adaptee,需要適配的介面
- Adapter,介面卡角色,把源介面轉換成目標介面,必須是具體的類
關鍵程式碼:介面卡繼承或依賴已有的物件,實現想要的目標介面。
優點:
- 可以讓任何兩個沒有關聯的類一起執行。
- 提高了類的複用。
- 增加了類的透明度。
- 靈活性好。
缺點:
- 過多地使用介面卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到呼叫的是 A 介面,其實內部被適配成了 B 介面的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用介面卡,而是直接對系統進行重構。
- 由於 JAVA 至多繼承一個類,所以至多隻能適配一個適配者類,而且目標類必須是抽象類。
interface FiveVolt {
public int getVolt5();
}
//需要適配的介面
class Volt220{
public int getVolt220() {
return 220;
}
}
//介面卡
class VoltAdapter extends Volt220 implements FiveVolt{
@Override
public int getVolt5() {
// TODO 自動生成的方法存根
return 5;
}
}
public static void main(String[] args) { VoltAdapter adapter = new VoltAdapter(); System.out.println("輸出電壓:"+adapter.getVolt5()); }