學習《Android 源碼設(shè)計模式解析與實踐》系列筆記
介紹
經(jīng)常會碰到兩個沒有關(guān)系的類型之間需要進行交互朴摊,但是雙方又都不想做出修改,這種尷尬的情況下椰于,可以增加一個 Adapter 的角色角撞,進行兩個不同類型的接口的兼容。
例如:讀卡器是作為內(nèi)存卡和筆記本之間的適配器臣疑。將內(nèi)存卡插入讀卡器,再將讀卡器插入筆記本徙菠,這樣就可以通過筆記本來讀取內(nèi)存卡讯沈。
適配器模式屬于結(jié)構(gòu)型模式。
定義
適配器模式把一個類的接口變換成客戶端所期待的另一種接口婿奔,從而使原本因接口不匹配而無法再一起工作的兩個類能夠在一起工作缺狠。
使用場景
- 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要萍摊,即接口不兼容儒老。
- 想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類记餐,包括一些可能在將來引進的類一起工作。
- 需要一個統(tǒng)一的輸出接口薇正,而輸入端的類型不可預(yù)知片酝。
結(jié)構(gòu)
- Target : 目標角色,也就是所期待的得到的接口挖腰。
- Adaptee : 需要適配的接口(源接口)雕沿。
- Adapter : 適配器角色,目的是把源接口轉(zhuǎn)換成目標接口猴仑。
實現(xiàn)
生活中的電壓為 220V审轮,而我們使用的筆記本使用的電壓只需要 5V,這時我們就需要使用適配器進行轉(zhuǎn)換辽俗。
/**
* Target 角色
*/
public interface Voltage5 {
public int getVoltage5();
}
/**
* Adaptee 角色疾渣,被適配的對象
*/
public class Voltage220 {
public int getVoltage220() {
System.out.println("Voltage 220V");
return 220;
}
}
/**
* Adapter 角色,負責把 220V 電壓轉(zhuǎn)化為 5V
*/
public class VoltageAdapter implements Voltage5 {
private Voltage220 mVoltage220;
public VoltageAdapter(Voltage220 voltage220) {
mVoltage220 = voltage220;
}
@Override
public int getVoltage5() {
System.out.println("經(jīng)過適配的電壓 5V");
return mVoltage220.getVoltage220();
}
public void setVoltage220(Voltage220 voltage220) {
mVoltage220 = voltage220;
}
}
public class Client {
public static void main(String args[]) {
VoltageAdapter adaper = new VoltageAdapter(new Voltage220());
adaper.getVoltage5();
}
}
總結(jié)
Adapter 模式的經(jīng)典實現(xiàn)在于將原本不兼容的接口融合在一起崖飘,使之能夠很好地進行合作榴捡。
優(yōu)點:
- 更好的復(fù)用性
- 更好的擴展性
缺點:
- 過多使用適配器,會讓系統(tǒng)非常凌亂朱浴,不易整體把握
相關(guān)文章:
設(shè)計模式整理(1) 代理模式
設(shè)計模式整理(2) 單例模式
設(shè)計模式整理(3) Builder 模式
設(shè)計模式整理(4) 原型模式
設(shè)計模式整理(5) 工廠模式
設(shè)計模式整理(6) 策略模式
設(shè)計模式整理(7) 狀態(tài)模式
設(shè)計模式整理(8) 責任鏈模式
設(shè)計模式整理(9) 觀察者模式
設(shè)計模式整理(10) 適配器模式
設(shè)計模式整理(11) 裝飾模式
設(shè)計模式整理(12) 中介者模式