日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式学习系列9 外观模式Facade

發(fā)布時(shí)間:2024/4/15 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式学习系列9 外观模式Facade 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.概述

????? 自己賣了一輛越野自行車,但畢竟不是自己定制的,買回來之后可能需要更改一下腳蹬,座皮,里程計(jì)數(shù)器或者剎車系統(tǒng),假如將自行車看做一個(gè)整體系統(tǒng),對(duì)我們而言使用的是自行車,然后我們對(duì)自己車構(gòu)件的修改對(duì)于我們的使用而言并沒有什么影響。在軟件里面一個(gè)大型系統(tǒng)需要分割為多個(gè)不同的子系統(tǒng)組成,可能回派分給不同的人去完成,對(duì)于我們整個(gè)系統(tǒng)頂層實(shí)現(xiàn)而言,我們只用關(guān)注子系統(tǒng)提供的接口即可,而不用去處理子系統(tǒng)的細(xì)節(jié),并且盡量去降低每個(gè)子系統(tǒng)之間的關(guān)系對(duì)于后面的擴(kuò)展肯定是更好的。從面向?qū)ο蟮慕嵌榷?#xff0c;我們需要每個(gè)子系統(tǒng)之間的耦合行最低并且子系統(tǒng)的更改盡量不會(huì)去更改頂層代碼,這時(shí)候我們就需要外觀模式來完成這個(gè)人物。

2.外觀模式定義

??????? 外觀模式定義為子系統(tǒng)中的一組接口提供一個(gè)一致的界面, 這個(gè)接口使得這一子系統(tǒng)更加容易使用。引入外觀角色之后,用戶只需要直接與外觀角色交互,用戶與子系統(tǒng)之間的復(fù)雜關(guān)系由外觀角色來實(shí)現(xiàn),從而降低了系統(tǒng)的耦合度。

(1)適用情況

  • 構(gòu)件一個(gè)層次的系統(tǒng)時(shí),子系統(tǒng)接口通過外觀模式定義
  • 為復(fù)雜系統(tǒng)提供一個(gè)簡(jiǎn)單的接口,滿足子系統(tǒng)變化對(duì)頂層結(jié)構(gòu)無影響
  • 客戶端與抽象類之間依賴性太強(qiáng)

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

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

  • 減少客戶端與子系統(tǒng)之間的耦合度,減少客戶端處理的數(shù)目,子系統(tǒng)的變化不會(huì)影響到客戶端的代碼。
  • 降低模塊之間的編譯依賴性

缺點(diǎn):

  • 只能處理單一的子系統(tǒng),如果引入新的子系統(tǒng),則需要修改整個(gè)客戶端代碼。

3.C++實(shí)現(xiàn)

? //外觀模式 #include "iostream" using namespace std; ? class SubSystem1 { public: void Action() { cout << "子系統(tǒng)1" << endl; } }; ? ? class SubSystem2 { public: void Action() { cout << "子系統(tǒng)2" << endl; } }; ? class Facede { private: SubSystem1* pSubSystem1 ; SubSystem2* pSubSystem2 ; public: Facede():pSubSystem1(0),pSubSystem2(0) { pSubSystem1 = new SubSystem1 ; pSubSystem2 = new SubSystem2 ; } ~Facede() { if(pSubSystem1 != 0) delete pSubSystem1 ; ? if(pSubSystem2 != 0) delete pSubSystem2 ; } void Action() { cout << "系統(tǒng)執(zhí)行" << endl; pSubSystem1->Action(); pSubSystem2->Action(); } }; ? ? int main() { Facede* pFacede = new Facede ; pFacede->Action(); delete pFacede; return 1; } ?

4.擴(kuò)展:抽象外觀模式

????? 外觀模式中需要對(duì)子系統(tǒng)進(jìn)行刪除,增加,修改的時(shí)候就需要對(duì)外觀接口以及里面的子類進(jìn)行修改,遮掩歸咎違背了面向?qū)ο蟮摹伴_放閉合原則”,抽象外觀模式可以避免這個(gè)問題的問題。 抽象外觀模式增減一個(gè)抽象外觀的基類,當(dāng)對(duì)當(dāng)前的子系統(tǒng)進(jìn)行修改時(shí)可通過新的外觀模式類來實(shí)現(xiàn)新的接口。

圖中增加了新的SubsystemC子類,這個(gè)時(shí)候不用去修改原有接口,只用重新增加一個(gè)新的接口接口。

5參考

http://blog.csdn.net/hguisu/article/details/7533759

http://blog.csdn.net/lovelion/article/details/8259789

細(xì)雨淅淅 標(biāo)簽: 設(shè)計(jì)模式

總結(jié)

以上是生活随笔為你收集整理的设计模式学习系列9 外观模式Facade的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。