適配器模式(轉(zhuǎn)化匹配惯悠,復(fù)用功能)

公告

如果您是第一次閱讀我的設(shè)計(jì)模式系列文章躁锡,建議先閱讀設(shè)計(jì)模式開篇,希望能得到您寶貴的建議察郁。

前言

自動(dòng)Alice買了機(jī)器人之后酪夷,就一直玩的不可開交酪耕。Alice發(fā)現(xiàn)機(jī)器人真的很智能,相比久遠(yuǎn)前的PC時(shí)代 — — 什么都要自己去敲命令滓彰,現(xiàn)在的機(jī)器人只要直接跟它對(duì)話就可以了控妻。

正文

Alice: 播放歌曲 稻香!
Samu: ……
Alice: 跳舞舞蹈 拉丁舞找蜜!
Samu: ……
Alice: 開門 客廳門饼暑!
Samu: ……
Alice: 燒水稳析!
Samu: ……
Alice: 做菜 紅燒魚洗做!
Alice: 做菜 酸菜魚!
Alice: 做菜 水煮魚彰居!
Samu: ……

程序員視角

一切命令都是通過語音命令錄入的诚纸,語音命令需要適配跳舞唱歌陈惰、開門畦徘、燒水做菜等命令抬闯。

所以這里牽扯到適配模式的定義:

適配器模式使得那些原本不兼容的接口適配之后得以工作井辆。

所以適配器模式適合為已有的接口作適配,適配器模式不生產(chǎn)新的接口溶握。

如何實(shí)現(xiàn)

已有的功能命令有: ** 播放歌曲杯缺、跳舞、開門睡榆、燒水萍肆、燒菜。**
期望的表現(xiàn)形式是:** 通過語音指令胀屿,分派給不同的命令實(shí)現(xiàn)塘揣。**

需建立:字符串指令的適配器 來適配不同的指令的實(shí)現(xiàn)。

// 適配類:用于適配ICommand接口
public class CommandAdapter implements ICommand {

    private String method;
    private String param;
    private User user;
    private Machine machine;

   // 傳入是字符串指令與上下文信息
    public CommandAdapter(String method, String param, User user, Machine machine) {
        this.method = method;
        this.param = param;
        this.user = user;
        this.machine = machine;
    }

    @Override
    public void excute() {
        // 依據(jù)傳入的字符串指令宿崭,找到對(duì)應(yīng)的指令
        Command command = (Command) CommandSimpleFactory.createCommand(this.user, this.machine, this.method, this.param);
        command.excute();
    }

指令通過Invoke客戶端執(zhí)行調(diào)用

public class Invoker {

    public void invoke(CommandAdapter adapter) {
        adapter.excute();
    }
}

分析下代碼:

  • CommandAdapter實(shí)現(xiàn)了接口ICommand亲铡,理解為CommandAdapter用于適配ICommand接口。
  • ICommand#excute()方法中葡兑,依據(jù)傳入?yún)?shù)method的不同匹配正確的指令實(shí)現(xiàn)奖蔓。理解為適配的具體行為。

這是單向的適配器(即:CommandAdapter實(shí)現(xiàn)了ICommand接口)铁孵,使CommandAdapter可以視作ICommand正常調(diào)用锭硼。

那么何為雙向適配器?即適配器對(duì)象蜕劝,同時(shí)實(shí)現(xiàn)了目標(biāo)接口被適配接口檀头。

舉個(gè)雙向適配器的例子:

  • 當(dāng)你家的插座是2口的時(shí)候轰异,但要用的電器需要3口插座。(單向暑始,2口 適配 3口)
  • 當(dāng)你家的插座是3口的時(shí)候搭独,但要用的電器需要2口插座。(單向廊镜,3口 適配 2口)
    當(dāng)適配器同時(shí)實(shí)現(xiàn)上述兩個(gè)單向適配器的時(shí)候牙肝,即認(rèn)為是雙向適配器。

總結(jié)

適配器模式又稱為包裝器嗤朴,是用來將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口配椭。這可以使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。適配器模式的關(guān)鍵是建立一個(gè)適配器雹姊,這個(gè)適配器實(shí)現(xiàn)了目標(biāo)接口并且包含了被適配者的引用股缸。

適配器的本質(zhì):轉(zhuǎn)化匹配,復(fù)用功能

適配器模式類圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吱雏,一起剝皮案震驚了整個(gè)濱河市敦姻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歧杏,老刑警劉巖镰惦,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異犬绒,居然都是意外死亡旺入,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門懂更,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眨业,“玉大人,你說我怎么就攤上這事沮协×浼瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵慷暂,是天一觀的道長聘殖。 經(jīng)常有香客問我,道長行瑞,這世上最難降的妖魔是什么奸腺? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮血久,結(jié)果婚禮上突照,老公的妹妹穿的比我還像新娘。我一直安慰自己氧吐,他們只是感情好讹蘑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布末盔。 她就那樣靜靜地躺著,像睡著了一般座慰。 火紅的嫁衣襯著肌膚如雪陨舱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天版仔,我揣著相機(jī)與錄音游盲,去河邊找鬼。 笑死蛮粮,一個(gè)胖子當(dāng)著我的面吹牛益缎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝉揍,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼链峭,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼畦娄!你這毒婦竟也來了又沾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤熙卡,失蹤者是張志新(化名)和其女友劉穎杖刷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驳癌,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滑燃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颓鲜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片表窘。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甜滨,靈堂內(nèi)的尸體忽然破棺而出乐严,到底是詐尸還是另有隱情,我是刑警寧澤衣摩,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布昂验,位于F島的核電站,受9級(jí)特大地震影響艾扮,放射性物質(zhì)發(fā)生泄漏既琴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一泡嘴、第九天 我趴在偏房一處隱蔽的房頂上張望甫恩。 院中可真熱鬧,春花似錦酌予、人聲如沸磺箕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滞磺。三九已至升薯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間击困,已是汗流浹背涎劈。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阅茶,地道東北人蛛枚。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像脸哀,于是被迫代替她去往敵國和親蹦浦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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