設(shè)計(jì)模式之外觀模式(門面模式)

一個(gè)栗子
身為一個(gè)程序猿,連續(xù)加班25天,在打了25個(gè)噴嚏之后溉贿,你終于意識到自己感冒了,為了能夠省下錢買阿珂288塊的暗夜貓娘皮膚浦旱,你決定去指定的定點(diǎn)醫(yī)院宇色。然后你就開始了漫長的排隊(duì)和沒完沒了的交錢、看診程序。
一般來說流程是這樣:
首先病人必須先掛號宣蠕,然后門診例隆。如果醫(yī)生要求化驗(yàn),病人必須首先劃價(jià)抢蚀,然后繳費(fèi)镀层,才可以到化驗(yàn)部門做化驗(yàn)∶笄化驗(yàn)后再回到門診室唱逢。

交互圖如下:

pic1.png

這個(gè)時(shí)候你一定覺得這樣來回的跑來跑去,并且要跟各個(gè)部門的人員打交道很麻煩屋休,然后你又想到了體檢的時(shí)候vip用戶可以有一個(gè)專門的小護(hù)士帶路坞古,安排各種行程。你不由得心生幻想劫樟,也希望有個(gè)年輕貌美單身的小護(hù)士代替來辦這些事痪枫,你只要輕聲細(xì)語的跟這個(gè)年輕貌美單身的小護(hù)士說話就可以了,于是出現(xiàn)了如下情景:

pic2.png

定義
隱藏了系統(tǒng)的復(fù)雜性叠艳,并向客戶端提供了一個(gè)可以訪問系統(tǒng)的接口奶陈。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)性模式。為子系統(tǒng)中的一組接口提供了一個(gè)統(tǒng)一的訪問接口附较,這個(gè)接口使得子系統(tǒng)更容易被訪問或者使用

結(jié)構(gòu)

pic3.png

角色

  • 門面(Facade)角色 :客戶端可以調(diào)用這個(gè)角色的方法吃粒。此角色知曉相關(guān)的(一個(gè)或者多個(gè))子系統(tǒng)的功能和責(zé)任。在正常情況下拒课,本角色會將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去声搁。

  • 子系統(tǒng)(SubSystem)角色 :可以同時(shí)有一個(gè)或者多個(gè)子系統(tǒng)。每個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類捕发,而是一個(gè)類的集合(如上面的子系統(tǒng)就是由ModuleA、ModuleB很魂、ModuleC三個(gè)類組合而成)扎酷。每個(gè)子系統(tǒng)都可以被客戶端直接調(diào)用,或者被門面角色調(diào)用遏匆。子系統(tǒng)并不知道門面的存在法挨,對于子系統(tǒng)而言,門面僅僅是另外一個(gè)客戶端而已幅聘。

源碼

public class Guahao {

    public void guahao() {
        System.out.println("掛號");
    }
}
public class Jiaofei {
    
    public void jiaofei() {
        System.out.println("繳費(fèi)");
    }
}
public class Kanzhen {
    
    public void kanzhen() {
        System.out.println("看診");
    }

    public void kaiyao() {
        System.out.println("開藥");
    }
}
public class Nayao {
    public void nayao() {
        System.out.println("拿藥");
    }
}
/**
 * Facade

 * 門面類
 * @version 1.0
 *
 */
public class Facade {

    public void kanbing() {
        Guahao guahao = new Guahao();
        Jiaofei jiaofei = new Jiaofei();
        Nayao nayao = new Nayao();
        Kanzhen kanzhen = new Kanzhen();
        guahao.guahao();
        jiaofei.jiaofei();
        kanzhen.kanzhen();
        jiaofei.jiaofei();
        nayao.nayao();
    }
}

運(yùn)行結(jié)果

pic4.jpg

優(yōu)點(diǎn)

  • 松散耦合
    門面模式松散了客戶端與子系統(tǒng)的耦合關(guān)系凡纳,讓子系統(tǒng)內(nèi)部的模塊能更容易擴(kuò)展和維護(hù)。

  • 簡單易用
    門面模式讓子系統(tǒng)更加易用帝蒿,客戶端不再需要了解子系統(tǒng)內(nèi)部的實(shí)現(xiàn)荐糜,也不需要跟眾多子系統(tǒng)內(nèi)部的模塊進(jìn)行交互,只需要跟門面類交互就可以了。

  • 更好的劃分訪問層次
    通過合理使用Facade暴氏,可以幫助我們更好地劃分訪問的層次延塑。有些方法是對系統(tǒng)外的,有些方法是系統(tǒng)內(nèi)部使用的答渔。把需要暴露給外部的功能集中到門面中关带,這樣既方便客戶端使用,也很好地隱藏了內(nèi)部的細(xì)節(jié)沼撕。

缺點(diǎn)

  • 如果增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼宋雏,這樣就違背了”開閉原則“(不過這點(diǎn)也是不可避免)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末务豺,一起剝皮案震驚了整個(gè)濱河市磨总,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冲呢,老刑警劉巖舍败,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敬拓,居然都是意外死亡邻薯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門乘凸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厕诡,“玉大人,你說我怎么就攤上這事营勤×橄樱” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵葛作,是天一觀的道長寿羞。 經(jīng)常有香客問我,道長赂蠢,這世上最難降的妖魔是什么绪穆? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮虱岂,結(jié)果婚禮上玖院,老公的妹妹穿的比我還像新娘。我一直安慰自己第岖,他們只是感情好难菌,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔑滓,像睡著了一般郊酒。 火紅的嫁衣襯著肌膚如雪遇绞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天猎塞,我揣著相機(jī)與錄音试读,去河邊找鬼。 笑死荠耽,一個(gè)胖子當(dāng)著我的面吹牛钩骇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铝量,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼倘屹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慢叨?” 一聲冷哼從身側(cè)響起纽匙,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拍谐,沒想到半個(gè)月后烛缔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轩拨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年践瓷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亡蓉。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晕翠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砍濒,到底是詐尸還是另有隱情淋肾,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布爸邢,位于F島的核電站樊卓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杠河。R本人自食惡果不足惜简识,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望感猛。 院中可真熱鬧,春花似錦奢赂、人聲如沸陪白。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咱士。三九已至立由,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間序厉,已是汗流浹背锐膜。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弛房,地道東北人道盏。 一個(gè)月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像文捶,于是被迫代替她去往敵國和親荷逞。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

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