設(shè)計模式整理(10) 適配器模式

學習《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)

適配器模式 UML 圖
  • 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) 中介者模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊圾,一起剝皮案震驚了整個濱河市达椰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌项乒,老刑警劉巖啰劲,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檀何,居然都是意外死亡蝇裤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門埃碱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猖辫,“玉大人,你說我怎么就攤上這事砚殿】性鳎” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵似炎,是天一觀的道長辛萍。 經(jīng)常有香客問我,道長羡藐,這世上最難降的妖魔是什么贩毕? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仆嗦,結(jié)果婚禮上辉阶,老公的妹妹穿的比我還像新娘。我一直安慰自己瘩扼,他們只是感情好谆甜,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著集绰,像睡著了一般规辱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栽燕,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天罕袋,我揣著相機與錄音,去河邊找鬼碍岔。 笑死浴讯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蔼啦。 我是一名探鬼主播兰珍,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼询吴!你這毒婦竟也來了掠河?” 一聲冷哼從身側(cè)響起亮元,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唠摹,沒想到半個月后爆捞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡勾拉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年煮甥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藕赞。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡成肘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斧蜕,到底是詐尸還是另有隱情双霍,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布批销,位于F島的核電站洒闸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏均芽。R本人自食惡果不足惜丘逸,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掀宋。 院中可真熱鬧深纲,春花似錦、人聲如沸劲妙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽是趴。三九已至,卻和暖如春澄惊,著一層夾襖步出監(jiān)牢的瞬間唆途,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工掸驱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肛搬,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓毕贼,卻偏偏與公主長得像温赔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鬼癣,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354