外觀模式(Facade)

為子系統(tǒng)中的一組接口提供一個統(tǒng)一的入口藤巢。外觀模式定義了一個高層接口炕横,這個接口使得這一子系統(tǒng)更加容易使用钧忽。

類型

結(jié)構(gòu)型

簡介

引入外觀模式之后胚泌,增加新的子系統(tǒng)或者移除子系統(tǒng)都非常方便省咨,客戶類無須進(jìn)行修改(或者極少的修改),只需要在外觀類中增加或移除對子系統(tǒng)的引用即可玷室。
外觀模式中所指的子系統(tǒng)是一個廣義的概念零蓉,它可以是一個類、一個功能模塊穷缤、系統(tǒng)的一個組成部分或者一個完整的系統(tǒng)敌蜂。子系統(tǒng)類通常是一些業(yè)務(wù)類,實(shí)現(xiàn)了一些具體的津肛、獨(dú)立的業(yè)務(wù)功能章喉。

參與者

  • Facade(外觀角色):在客戶端可以調(diào)用它的方法,在外觀角色中可以知道相關(guān)的(一個或者多個)子系統(tǒng)的功能和責(zé)任身坐;在正常情況下秸脱,它將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去,傳遞給相應(yīng)的子系統(tǒng)對象處理部蛇。
  • SubSystem(子系統(tǒng)角色):在軟件系統(tǒng)中可以有一個或者多個子系統(tǒng)角色摊唇,每一個子系統(tǒng)可以不是一個單獨(dú)的類,而是一個類的集合涯鲁,它實(shí)現(xiàn)子系統(tǒng)的功能巷查;每一個子系統(tǒng)都可以被客戶端直接調(diào)用,或者被外觀角色調(diào)用抹腿,它處理由外觀類傳過來的請求岛请;子系統(tǒng)并不知道外觀的存在,對于子系統(tǒng)而言警绩,外觀角色僅僅是另外一個客戶端而已崇败。

用法

舉例

在幾乎所有的軟件中都能夠找到外觀模式的應(yīng)用,如絕大多數(shù)B/S系統(tǒng)都有一個首頁或者導(dǎo)航頁面房蝉,大部分C/S系統(tǒng)都提供了菜單或者工具欄僚匆,在這里,首頁和導(dǎo)航頁面就是B/S系統(tǒng)的外觀角色搭幻,而菜單和工具欄就是C/S系統(tǒng)的外觀角色,通過它們用戶可以快速訪問子系統(tǒng)逞盆,降低了系統(tǒng)的復(fù)雜程度檀蹋。所有涉及到與多個業(yè)務(wù)對象交互的場景都可以考慮使用外觀模式進(jìn)行重構(gòu)。

適用場景
  • 當(dāng)要為訪問一系列復(fù)雜的子系統(tǒng)提供一個簡單入口時可以使用外觀模式。
  • 客戶端程序與多個子系統(tǒng)之間存在很大的依賴性俯逾。引入外觀類可以將子系統(tǒng)與客戶端解耦贸桶,從而提高子系統(tǒng)的獨(dú)立性和可移植性。
  • 在層次化結(jié)構(gòu)中桌肴,可以使用外觀模式定義系統(tǒng)中每一層的入口皇筛,層與層之間不直接產(chǎn)生聯(lián)系,而通過外觀類建立聯(lián)系坠七,降低層之間的耦合度水醋。

總結(jié)

外觀模式是一種使用頻率非常高的設(shè)計(jì)模式,它通過引入一個外觀角色來簡化客戶端與子系統(tǒng)之間的交互彪置,為復(fù)雜的子系統(tǒng)調(diào)用提供一個統(tǒng)一的入口拄踪,使子系統(tǒng)與客戶端的耦合度降低,且客戶端調(diào)用非常方便拳魁。外觀模式并不給系統(tǒng)增加任何新功能惶桐,它僅僅是簡化調(diào)用接口。

優(yōu)點(diǎn)
  • 它對客戶端屏蔽了子系統(tǒng)組件潘懊,減少了客戶端所需處理的對象數(shù)目姚糊,并使得子系統(tǒng)使用起來更加容易。通過引入外觀模式授舟,客戶端代碼將變得很簡單叛拷,與之關(guān)聯(lián)的對象也很少。
  • 它實(shí)現(xiàn)了子系統(tǒng)與客戶端之間的松耦合關(guān)系岂却,這使得子系統(tǒng)的變化不會影響到調(diào)用它的客戶端忿薇,只需要調(diào)整外觀類即可。
  • 一個子系統(tǒng)的修改對其他子系統(tǒng)沒有任何影響躏哩,而且子系統(tǒng)內(nèi)部變化也不會影響到外觀對象署浩。
缺點(diǎn)
  • 不能很好地限制客戶端直接使用子系統(tǒng)類,如果對客戶端訪問子系統(tǒng)類做太多的限制則減少了可變性和靈活 性扫尺。
  • 如果設(shè)計(jì)不當(dāng)筋栋,增加新的子系統(tǒng)可能需要修改外觀類的源代碼,違背了開閉原則正驻。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弊攘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姑曙,更是在濱河造成了極大的恐慌襟交,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伤靠,死亡現(xiàn)場離奇詭異捣域,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門焕梅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迹鹅,“玉大人,你說我怎么就攤上這事贞言⌒迸铮” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵该窗,是天一觀的道長弟蚀。 經(jīng)常有香客問我,道長挪捕,這世上最難降的妖魔是什么粗梭? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮级零,結(jié)果婚禮上断医,老公的妹妹穿的比我還像新娘。我一直安慰自己奏纪,他們只是感情好鉴嗤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著序调,像睡著了一般醉锅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上发绢,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天硬耍,我揣著相機(jī)與錄音,去河邊找鬼边酒。 笑死经柴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墩朦。 我是一名探鬼主播坯认,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氓涣!你這毒婦竟也來了牛哺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤劳吠,失蹤者是張志新(化名)和其女友劉穎引润,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赴背,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椰拒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年晶渠,在試婚紗的時候發(fā)現(xiàn)自己被綠了凰荚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燃观。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖便瑟,靈堂內(nèi)的尸體忽然破棺而出缆毁,到底是詐尸還是另有隱情,我是刑警寧澤到涂,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布脊框,位于F島的核電站,受9級特大地震影響践啄,放射性物質(zhì)發(fā)生泄漏浇雹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一屿讽、第九天 我趴在偏房一處隱蔽的房頂上張望昭灵。 院中可真熱鬧,春花似錦伐谈、人聲如沸烂完。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抠蚣。三九已至,卻和暖如春履澳,著一層夾襖步出監(jiān)牢的瞬間嘶窄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工距贷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柄冲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓储耐,卻偏偏與公主長得像羊初,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子什湘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

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