天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

C#面向?qū)ο笤O(shè)計(jì)模式縱橫談:Facade 外觀模式

  系統(tǒng)的復(fù)雜度

  假設(shè)我們需要開(kāi)發(fā)一個(gè)坦克模擬系統(tǒng)用于模擬坦克車(chē)在各種作戰(zhàn)環(huán)境中的行為,其中坦克系統(tǒng)由引擎、控制器、車(chē)輪、車(chē)身等各子系統(tǒng)構(gòu)成。

image

  如何使用這樣的系統(tǒng)

image

  動(dòng)機(jī)(Motivation)

  上述A方案的問(wèn)題在于組件的客戶(hù)(即外部接口,或客戶(hù)程序)和組件中各種復(fù)雜的子系統(tǒng)有了過(guò)多的耦合,隨著外部客戶(hù)程序和各子系統(tǒng)的演化,這種過(guò)多的耦合面臨很多變化的挑戰(zhàn)。如何簡(jiǎn)化外部客戶(hù)程序和系統(tǒng)間的交互接口?如何將外部客戶(hù)程序的演化和內(nèi)部子系統(tǒng)的變化之間的依賴(lài)相互解耦?

  意圖(Intent)

  為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,F(xiàn)acade模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。

                                              ——《設(shè)計(jì)模式》GoF

  例說(shuō)Facade應(yīng)用

  以前面的例子為例

image

image

  我們所說(shuō)的接口其實(shí)并不一定是Interface,只要是Public方法,能被外部調(diào)用的方法都叫接口,這里的定義其實(shí)是更加廣義的接口定義,即露在外面和外界所交互的這一部分。這里主系統(tǒng)和子系統(tǒng)之間的關(guān)系不是繼承關(guān)系,而應(yīng)該是一種包含的關(guān)系。

image

  這樣在外部使用的時(shí)候只能使用TankFacade類(lèi)和里面的Start、Stop等方法,其他子系統(tǒng)都被包含在內(nèi)部了。這樣減輕了使用的復(fù)雜度,客戶(hù)程序只用關(guān)心TankFacade,而不用關(guān)心里面的子系統(tǒng)情況。更重要的是,這樣的設(shè)計(jì)有效地把客戶(hù)程序和子系統(tǒng)解耦。

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

image

  這種結(jié)構(gòu)不僅體現(xiàn)了類(lèi)的單一職責(zé)原則,而且也體現(xiàn)了開(kāi)放封閉原則。而且子系統(tǒng)和系統(tǒng)之間是個(gè)組合關(guān)系,而不是繼承關(guān)系。高層總是相對(duì)穩(wěn)定,低層總是相對(duì)易變。所以我們應(yīng)該盡量依賴(lài)高層抽象,而不是低層細(xì)節(jié)實(shí)現(xiàn)。

  Facade模式的幾個(gè)要點(diǎn)

  從客戶(hù)程序的角度來(lái)看,F(xiàn)acade模式不僅簡(jiǎn)化了整個(gè)組件系統(tǒng)的接口,同時(shí)對(duì)于組件內(nèi)部與外部客戶(hù)程序來(lái)說(shuō),從某種程度上也達(dá)到了一種“解耦”的效果——內(nèi)部子系統(tǒng)的任何變化不會(huì)影響到Facade接口的變化。

Facade設(shè)計(jì)模式更注重從架構(gòu)的層次去看整個(gè)系統(tǒng),而不是單個(gè)類(lèi)的層次。Facade很多時(shí)候更是一種架構(gòu)設(shè)計(jì)模式。

  注意區(qū)分Facade模式、Adapter模式、Bridge模式與Decorator模式:

  Facade模式注重簡(jiǎn)化接口

  Adapter模式注重轉(zhuǎn)換接口

  Bridge模式注重分離接口(抽象)與其實(shí)現(xiàn)

  Decorator模式注重穩(wěn)定接口的前提下為對(duì)象擴(kuò)展功能

  .NET架構(gòu)中的Facade應(yīng)用

  假如我們做一個(gè)網(wǎng)上購(gòu)物系統(tǒng),考慮它的認(rèn)證系統(tǒng)。用戶(hù)權(quán)限不同,能做的事情也不同,它可能會(huì)調(diào)用各種各樣的子系統(tǒng)。認(rèn)證系統(tǒng)里面也可能包含很多子系統(tǒng),比如第三方認(rèn)證等等。這些認(rèn)證子系統(tǒng)合作起來(lái)豐富了我們網(wǎng)站的功能,那么這種情況我們就可以考慮把認(rèn)證的各個(gè)子系統(tǒng)封裝成一個(gè)認(rèn)證系統(tǒng)。

  如果我們想做跨平臺(tái)的及時(shí)聊天工具,我們也可以用一個(gè)Facade封裝某個(gè)平臺(tái)系統(tǒng)的API接口。這樣我們?cè)谑褂肁PI的時(shí)候,就不需要去關(guān)心平臺(tái)內(nèi)部的變化。

it知識(shí)庫(kù)C#面向?qū)ο笤O(shè)計(jì)模式縱橫談:Facade 外觀模式,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本高清不卡一区久久精品 | 日日噜噜噜夜夜爽爽狠狠 | 大胸美女被C得嗷嗷叫动态图 | 亚洲精品视频在线观看免费 | 欧美日韩北条麻妃一区二区 | 日本超A大片在线观看 | 亚洲精品午夜aaa级久久久久 | 久久精品无码一区二区日韩av | 成人影院久久久久久影院 | 男女XX00上下抽搐动态图 | 美女挑战50厘米长的黑人 | 欧美亚洲日韩一道免费观看 | 国产高潮国产高潮久久久久久 | 国产欧美国日产在线播放 | 波多结衣一区二区三区 | 午夜福利视频极品国产83 | 少妇高潮惨叫久久久久久欧美 | 娇小亚裔被两个黑人 | 99热国产这里只有精品6 | 亚洲高清无在码在线无弹窗 | 亚洲欧美中文在线一区 | 99久久久精品免费观看国产 | 美女脱18以下禁止看免费 | 嫩草视频在线观看免费 | 久久久国产精品免费A片蜜芽广 | 亚洲视频欧美视频 | 色综合久久五月 | 亚洲AV久久无码精品热九九 | 一一本之道高清视频在线观看中文字幕 | 日韩AV无码一区二区三区不卡毛片 | 免费小视频在线观看 | 97色伦图片7778久久 | 国产精品黄色大片 | 香蕉AV福利精品导航 | 亚洲精品久久无码AV片银杏 | 免费韩伦影院在线观看 | 被黑人掹躁10次高潮 | adc高清在线观看 | 亚洲成人网导航 | 国产一区二区三区四区五在线观看 | 久久精品久久久久 |