適配器模式

一 定義

適配器模式在我們的開發(fā)過程中使用率非常高花竞,從android開發(fā)中隨處可見的Adapter就可以看出。那么什么是適配器模式呢倘核,適配器是將兩個不兼容的類融合在一起谷浅,將不同的東西通過一種轉(zhuǎn)換使得他們協(xié)作起來好爬。

適配器模式把一個類的接口變換成客戶端所期待的另一個接口局雄,從而使原本因接口不匹配而無法再一起工作的兩個類能夠在一起工作。

簡單地說存炮,適配器就是一種適配中間件炬搭,它存在于不匹配的了兩者之間蜈漓,用于連接兩者,使不匹配變得匹配尚蝌。

二 使用場景

  • 系統(tǒng)需要使用現(xiàn)有的類迎变,而此類的接口不符合系統(tǒng)的需要充尉,既接口不兼容飘言。
  • 想要建立一個可以重復(fù)使用的類,用于一些彼此之間沒有太大關(guān)聯(lián)的一些類驼侠,包括一些可能在將來引進姿鸿。
  • 需要一個統(tǒng)一的輸出接口,而輸入端的類型不可預(yù)知倒源。

三 類適配器

適配器模式分為兩種苛预,既類適配器模式和對象適配器模式。首先看類是適配器模式笋熬。

三-1 模式結(jié)構(gòu)

如圖所示热某,類適配器是通過實現(xiàn)Target接口以及繼承Adaptee類實現(xiàn)接口轉(zhuǎn)換的,例如胳螟,目標接口Target需要的是operation2昔馋,但是Adaptee里只有一個operation3,因此就出現(xiàn)了不兼容的情況糖耸,因此可以通過Adapter實現(xiàn)一個operation2方法將Adaptee的operation3轉(zhuǎn)化為Target需要的operation2秘遏,實現(xiàn)兼容。

  • Target:目標角色嘉竟,該角色定義把其他類型轉(zhuǎn)化為何種接口邦危,也就是我們期望的接口。
  • Adaptee:需要適配的接口舍扰,源角色倦蚪。
  • Adapter:適配器角色,將源角色轉(zhuǎn)換為目標角色边苹,也是本模式的核心陵且。這一角色不可以是接口,而必須是實體類勾给。

三-2 實例

下面以生活中常見的給手機充電的例子來說明滩报,生活中的電線電壓一般都是220v,而手機充電需要的電壓是5v的播急,這就出現(xiàn)了不匹配的情況脓钾,這時就需要一個中間層,即適配器來解決桩警。
通過以上分析可知可训,5v的電壓就是Target接口,220V電壓就是Adaptee類,而將電壓從220V轉(zhuǎn)換為5V就是Adapter握截。

具體的代碼如下:

  • Target角色飞崖,目標角色,是一個接口或者抽象類
// Target角色
public interface FiveVolt {
    public int getVole5();
}
  • Adaptee角色
// Adaptee角色谨胞,需要被轉(zhuǎn)換的對象
public class Volt220 {
    public int getVolt220(){
        return 220;
    }
}
  • Adapter 角色
// Adapter角色固歪,將220V的電壓
public class VoltAdapter extends Volt220 implements FiveVolt{
    @Override
    public int getVole5() {
        return 5;
    }
}
  • 測試代碼
 VoltAdapter adapter=new VoltAdapter();
        System.out.println("輸出電壓: "+adapter.getVole5());

以上,因為對應(yīng)的Target的目標是要獲取5v的輸出電壓胯努,而Adatee正常輸出電壓是220V牢裳,此時就需要Adapter將220v的電壓轉(zhuǎn)換為5v電壓,解決了接口不兼容問題叶沛。

四 對象適配器

與類適配器不同的是蒲讯,對象適配器在將適配的類的API轉(zhuǎn)換為目標類的API時,不是使用繼承的關(guān)系灰署,而是使用代理的方式判帮。
也就是說,需要提供一個包裝類Adapter溉箕,這個包裝類包裝了一個Adaptee的實例晦墙,從而此包裝類能夠把Adaptee的API與Target類的API鏈接起來。

代碼如下

  • Target角色约巷,目標角色
// Target角色
public interface FiveVolt {
    public int getVole5();
}
  • Adaptee角色
// Adaptee角色偎痛,需要被轉(zhuǎn)換的對象
public class Volt220 {
    public int getVolt220(){
        return 220;
    }
}
  • Adapter 角色
// 對象適配器模式
public class VoltsAdapter implements FiveVolt{

    Volt220 mVolt220;

    public VoltsAdapter(Volt220 adaptee){
        mVolt220=adaptee;
    }


    public int getVolt220(){
        return mVolt220.getVolt220();
    }


    @Override
    public int getVole5() {
        return 5;
    }
}
  • 測試代碼
    VoltsAdapter adapter1=new VoltsAdapter(new Volt220());
        System.out.println("輸出電壓: "+adapter1.getVole5());

適配器模式的本質(zhì)就是:轉(zhuǎn)換匹配,復(fù)用功能独郎。適配器模式具有以下優(yōu)點:

  • 更好的復(fù)用性
    如果功能已經(jīng)有了踩麦,只是接口不兼容,那么可以通過是適配器模式讓這些功能得到很好的復(fù)用氓癌。
  • 更好的擴展性
    使用適配器模式可以自然地擴展系統(tǒng)的功能谓谦。
  • 但是,不宜過多地使用適配器贪婉,會讓系統(tǒng)非常凌亂反粥,不易于對對項目的整體把握。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疲迂,一起剝皮案震驚了整個濱河市才顿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尤蒿,老刑警劉巖郑气,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腰池,居然都是意外死亡尾组,警方通過查閱死者的電腦和手機忙芒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讳侨,“玉大人呵萨,你說我怎么就攤上這事】缈纾” “怎么了潮峦?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歹叮。 經(jīng)常有香客問我跑杭,道長,這世上最難降的妖魔是什么咆耿? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮爹橱,結(jié)果婚禮上萨螺,老公的妹妹穿的比我還像新娘。我一直安慰自己愧驱,他們只是感情好慰技,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著组砚,像睡著了一般吻商。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糟红,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天艾帐,我揣著相機與錄音,去河邊找鬼盆偿。 笑死柒爸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的事扭。 我是一名探鬼主播捎稚,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼求橄!你這毒婦竟也來了今野?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罐农,失蹤者是張志新(化名)和其女友劉穎条霜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啃匿,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蛔外,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年蛆楞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夹厌。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡豹爹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矛纹,到底是詐尸還是另有隱情臂聋,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布或南,位于F島的核電站孩等,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏采够。R本人自食惡果不足惜肄方,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹬癌。 院中可真熱鬧权她,春花似錦、人聲如沸逝薪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽董济。三九已至步清,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虏肾,已是汗流浹背廓啊。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留询微,地道東北人崖瞭。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像撑毛,于是被迫代替她去往敵國和親书聚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容