一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C# 23種設(shè)計(jì)模式匯總(更新完畢)

 空城66 2014-12-21
創(chuàng)建型模式
工廠方法(Factory Method)
在工廠方法模式中,工廠方法用來創(chuàng)建客戶所需要的產(chǎn)品,同時(shí)還向客戶隱藏了哪種具體產(chǎn)品類將被實(shí)例化這一細(xì)節(jié)。工廠方法模式的核心是一個(gè)抽象工廠類,各種具體工廠類通過抽象工廠類將工廠方法繼承下來。如此使得客戶可以只關(guān)心抽象產(chǎn)品和抽象工廠,完全不用理會(huì)返回的是哪一種具體產(chǎn)品,也不用關(guān)系它是如何被具體工廠創(chuàng)建的。

抽象工廠模式(Abstract Factory)
抽象工廠模式的主要優(yōu)點(diǎn)是隔離了具體類的生成,使得客戶不需要知道什么被創(chuàng)建了。猶豫這種隔離,更換一個(gè)具體工廠就變得相對(duì)容易。所有的具體工廠都實(shí)現(xiàn)了抽象工廠中定義的那些公共接口,因此只需改變具體工廠的實(shí)例,就可以在某種程度上改變這個(gè)軟件的系統(tǒng)的行為。另外,應(yīng)用抽象工廠模式符合GRASP純虛構(gòu)的模式,可以實(shí)現(xiàn)高內(nèi)聚低耦合的設(shè)計(jì)目的,因此抽象工廠模式得到了廣泛應(yīng)用。

建造者模式(Builder Pattern)
建造者模式將一個(gè)復(fù)雜對(duì)象的生成責(zé)任作了很好的分配。它把構(gòu)造過程放在指揮者的方法中,把裝配過程放到具體建造者類中。建造者模式的產(chǎn)品之間都有共通點(diǎn),但有時(shí)候,產(chǎn)品之間的差異性很大,這就需要借助工廠方法模式或抽象工廠模式。另外,如果產(chǎn)品的內(nèi)部變化復(fù)雜,Builder的每一個(gè)子類都需要對(duì)應(yīng)到不同的產(chǎn)品去做構(gòu)建的動(dòng)作、方法,這就需要定義很多個(gè)具體建造類來實(shí)現(xiàn)這種變化。

單件模式(Single Pattern)
Singleton單例模式為一個(gè)面向?qū)ο蟮膽?yīng)用程序提供了對(duì)象唯一的訪問點(diǎn),不管它實(shí)現(xiàn)何種功能,此種模式都為設(shè)計(jì)及開發(fā)團(tuán)隊(duì)提供了共享的概念。然而,Singleton對(duì)象類派生子類就有很大的困難,只有在父類沒有被實(shí)例化時(shí)才可以實(shí)現(xiàn)。值得注意的是,有些對(duì)象不可以做成Singleton,比如.net的數(shù)據(jù)庫鏈接對(duì)象(Connection),整個(gè)應(yīng)用程序同享一個(gè)Connection對(duì)象會(huì)出現(xiàn)連接池溢出錯(cuò)誤。另外,.net提供了自動(dòng)廢物回收的技術(shù),因此,如果實(shí)例化的對(duì)象長時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為它是廢物,自動(dòng)消滅它并回收它的資源,下次利用時(shí)又會(huì)重新實(shí)例化,這種情況下應(yīng)注意其狀態(tài)的丟失。

原型模式(Protype Pattern)
原型模式得到了廣泛的應(yīng)用,特別是在創(chuàng)建對(duì)象成本較大的情況下(初始化需占用較長時(shí)間,占用太多CPU資源或網(wǎng)絡(luò)資源。比如通過Webservice或DCOM創(chuàng)建對(duì)象,或者創(chuàng)建對(duì)象要裝載大文件),系統(tǒng)如果需要重復(fù)利用,新的對(duì)象可以通過原型模式對(duì)已有對(duì)象的屬性進(jìn)行復(fù)制并稍作修改來取得。另外,如果系統(tǒng)要保存對(duì)象的狀態(tài)而對(duì)象的狀態(tài)變化很小,或者對(duì)象本身占內(nèi)存不大的時(shí)候,也可以用原型模式配合備忘錄模式來應(yīng)用。相反地,如果對(duì)象的狀態(tài)變化很大,或者對(duì)象占用內(nèi)存很大,那么采用狀態(tài)模式會(huì)比原型模式更好。原型模式的缺點(diǎn)是在實(shí)現(xiàn)深層復(fù)制時(shí)需要編寫復(fù)雜的代碼。

結(jié)構(gòu)型模式
適配器模式(Adapter Pattern)
適配器模式可以將一個(gè)類的接口和另一個(gè)類的接口匹配起來,使用的前提是你不能或不想修改原來的適配器母接口(adaptee)。例如,你向第三方購買了一些類、控件,但是沒有源程序,這時(shí),使用適配器模式,你可以統(tǒng)一對(duì)象訪問接口。但客戶調(diào)用可能需要變動(dòng)。

橋接模式(Bridge Pattern)
橋接模式可以從接口中分離實(shí)現(xiàn)功能,使得設(shè)計(jì)更具擴(kuò)展性,這樣,客戶調(diào)用方法時(shí)根本不需要知道實(shí)現(xiàn)的細(xì)節(jié)。
橋接模式減少了子類,假設(shè)程序要在2個(gè)操作系統(tǒng)中處理6種圖像格式,純粹的繼承就需要(2*6)12個(gè)子類,而應(yīng)用橋接模式,只需要(2+6)8個(gè)子類。它使得代碼更清潔,生成的執(zhí)行程序文件更小?! ?br>橋接模式的缺陷是抽象類與實(shí)現(xiàn)類的雙向連接使得運(yùn)行速度減慢。

組合模式(Composite Pattern)
組合模式可以清楚地定義分層次的復(fù)雜對(duì)象,表示對(duì)象的全部或部分層次,使得增加新部件也更容易,因?yàn)樗尶蛻艉雎粤藢哟蔚牟煌裕慕Y(jié)構(gòu)又是動(dòng)態(tài)的,提供了對(duì)象管理的靈活接口。組合模式對(duì)于樹結(jié)構(gòu)的控制有著神奇的功效,例如在人力資源系統(tǒng)的組織架構(gòu)及ERP系統(tǒng)的BOM設(shè)計(jì)中,組合模式得到重點(diǎn)應(yīng)用。
組合模式的缺陷是使得設(shè)計(jì)變得更加抽象。對(duì)象的商業(yè)規(guī)則如果很復(fù)雜,則實(shí)現(xiàn)組合模式具有很大挑戰(zhàn)性,并且,不是所有的方法都與葉部件子類有關(guān)聯(lián)。

裝飾模式(Decorator Pattern)
裝飾模式提供了比靜態(tài)繼承更好的柔韌性,它允許開發(fā)一系列的功能類用來代替增加對(duì)象的行為,這既不會(huì)污染原來對(duì)象的源碼,還能使代碼更容易編寫,使類更具擴(kuò)展性,因?yàn)樽兓际怯尚碌难b飾類來完成。還可以建立連接的裝飾對(duì)象關(guān)系鏈。
需要注意的是,裝飾鏈不宜過長。裝飾鏈太長會(huì)使系統(tǒng)花費(fèi)較長時(shí)間用于初始化對(duì)象,同時(shí)信息在鏈中的傳遞也會(huì)浪費(fèi)太多的時(shí)間。這個(gè)情況好比物品包裝,包了一層又一層,大包套小包。另外,如果原來的對(duì)象接口發(fā)生變化,它所以的裝飾類都要修改以匹配它的變化。派生子類會(huì)影響對(duì)象的內(nèi)部,而一個(gè)Decorator只會(huì)影響對(duì)象的外表。

外觀模式(Fa?ade Pattern)
外觀模式提供了一個(gè)簡單且公用的接口去處理復(fù)雜的子系統(tǒng),并且沒有減少子系統(tǒng)的功能。它遮蔽了子系統(tǒng)的復(fù)雜性,避免了客戶與子系統(tǒng)直接鏈接,它也減少了子系統(tǒng)與子系統(tǒng)間的連接,每個(gè)子系統(tǒng)都有它的Facade模式,每個(gè)子系統(tǒng)采用Facade模式去訪問其他子系統(tǒng)。外觀模式的劣勢(shì)就是限制了客戶的自由,減少了可變性。

享元模式(Flyweight Pattern)
Flyweight模式需要你認(rèn)真考慮如何能細(xì)化對(duì)象,以減少處理的對(duì)象數(shù)量,從而減少存留對(duì)象在內(nèi)存或其他存儲(chǔ)設(shè)備中的占用量。然而,此模式需要維護(hù)大量對(duì)象的外部狀態(tài),如果外部狀態(tài)的數(shù)據(jù)量大,傳遞、查找、計(jì)算這些惡數(shù)據(jù)會(huì)變得非常復(fù)雜。當(dāng)外部和內(nèi)部的狀態(tài)很難分清時(shí),不宜采用flyweight模式。

代理模式(Proxy Pattern)
當(dāng)對(duì)象在遠(yuǎn)程機(jī)器上,要通過網(wǎng)絡(luò)來生成時(shí),速度可能會(huì)慢,此時(shí)應(yīng)用Remote Proxy模式,可以掩蔽對(duì)象由網(wǎng)絡(luò)生成的過程,系統(tǒng)的速度會(huì)加快;對(duì)于大圖片的加載,Virtual Proxy模式可以讓加載在后臺(tái)進(jìn)行,前臺(tái)用的Proxy對(duì)象使得整體運(yùn)行速度得到優(yōu)化;Protect Proxy可以驗(yàn)證對(duì)真實(shí)對(duì)象的引用權(quán)限。
代理模式的缺陷是請(qǐng)求的處理速度會(huì)變慢,并且實(shí)現(xiàn)Proxy模式需要額外的工作。

行為型模式
職責(zé)鏈模式(Chain of Responsibility)
責(zé)任鏈模式可以減少對(duì)象的連接,為對(duì)象責(zé)任分配增加了很大的靈活性。該模式允許把一組類作為一個(gè)類來使用,并且在類的組合中,一個(gè)類的事件可以發(fā)送到另一個(gè)類并由其處理。
責(zé)任鏈模式通常應(yīng)用與圖形用戶界面中,窗體的部件可能會(huì)包含其他幾個(gè)小部件,就如同Windows窗體應(yīng)用程序中,控件中又可以放置其他控件,控件邊界會(huì)決定是否處理事件,或者將事件傳遞給父控件來處理。
另外,責(zé)任鏈還會(huì)以樹狀出現(xiàn),這樣,一個(gè)事件可以傳給多個(gè)類,或者,多個(gè)類的信息可以提交到一個(gè)類。樹狀責(zé)任鏈能夠提供更靈活的技巧,但缺點(diǎn)是信息在樹中容易迷失。

命令模式(Command Pattern)
命令模式分離了接受請(qǐng)求的對(duì)象與實(shí)現(xiàn)處理請(qǐng)求工作的對(duì)象,這樣,已經(jīng)存在的類可以保持不變,使得增加新類的工作更簡單。例如,很多軟件的宏命令就提高了系統(tǒng)的自動(dòng)化程度。
命令模式還可以分離用戶界面和業(yè)務(wù)對(duì)象,降低系統(tǒng)的耦合度。
但是,命令模式最主要的缺陷就是,類的數(shù)量增加了,系統(tǒng)變得更復(fù)雜,程序的調(diào)試工作也相應(yīng)變得困難。

解釋器模式(Interpreter Pattern)
解釋器模式的作用很強(qiáng)大,它使得改變和擴(kuò)展文法變得容易,實(shí)現(xiàn)文法也變得簡單明了,很多編譯器,包括文本編輯器、網(wǎng)頁瀏覽器及VRML都應(yīng)用解釋器模式。
解釋器模式的缺陷就是,因?yàn)槲木鋾?huì)分析成樹結(jié)構(gòu),解釋器需要遞歸訪問它,所以效率會(huì)受影響。這種情況開發(fā)人員會(huì)有所體會(huì),編譯整個(gè)工程源碼耗費(fèi)時(shí)間都比較長。

模版方法模式(Template Method)
模版方法模式在一個(gè)類中形式化地定義算法,而由它的子類實(shí)現(xiàn)細(xì)節(jié)的處理。模版方法模式的優(yōu)勢(shì)是,在子類定義處理算法時(shí)不會(huì)改變算法的結(jié)構(gòu)。
模版方法的特點(diǎn)在于,每個(gè)不同的實(shí)現(xiàn)都需要定義一個(gè)子類,這也復(fù)合高內(nèi)聚的責(zé)任分配模式,不能說成是它的缺點(diǎn)。

迭代器模式(Iterator Pattern)
迭代器模式支持在聚集中移動(dòng)游標(biāo),使得訪問聚合中的元素變得簡單,簡化了聚集的接口,封裝了聚合的對(duì)象。
迭代器模式還可以應(yīng)用于對(duì)樹結(jié)構(gòu)的訪問,程序不需要從頭逐行代碼查找相應(yīng)位置,可控制到從子集開始查找,對(duì)于加快程序的運(yùn)行速度有很重要的作用。
迭代器模式的缺點(diǎn)是聚合密切相關(guān),增加了耦合。但將這種耦合定義在抽象基類,可解決這個(gè)問題。

觀察者模式(Oberver Pattern)
觀察者模式抽象了被觀察對(duì)象與觀察者對(duì)象的連接,提供了廣播式的對(duì)象間通信,并且容易增加新的觀察者對(duì)象。觀察者模式的缺陷是對(duì)象間的關(guān)系難以理解,在某種情況下會(huì)表現(xiàn)低效能。

中介者模式(Mediator Pattern)
中介者模式分離了兩個(gè)同事類,簡化了對(duì)象協(xié)議,中央控制對(duì)象交互,從而使個(gè)體對(duì)象變得更容易且更簡單,因?yàn)樗恍枰獋鬟f數(shù)據(jù)給其他個(gè)體對(duì)象,僅僅傳給中介者就可以了。個(gè)體對(duì)象不需要具有處理內(nèi)部交流的邏輯,所以更加突出它的面向?qū)ο筇匦浴?br>
備忘錄模式(Memento Pattern)
Memento模式保存了封裝的邊界,一個(gè)Memento對(duì)象是另一種原發(fā)器對(duì)象的表示,不會(huì)被其他代碼改動(dòng)。這種模式簡化了原發(fā)器對(duì)象,Memento只保存原發(fā)器的狀態(tài)。采用堆棧備忘對(duì)象,可以實(shí)現(xiàn)多次取消操作。

狀態(tài)模式(State Pattern)
狀態(tài)模式在對(duì)象內(nèi)保存特定的狀態(tài)并且就不同的狀態(tài)履行不同的行為,它使?fàn)顟B(tài)的變化顯得清晰明了,也很容易創(chuàng)建對(duì)象的新狀態(tài)。
狀態(tài)模式在工作流或游戲等各種系統(tǒng)中大量使用,例如在政府OA系統(tǒng)中,一個(gè)批文的狀態(tài)有多種:未辦、正在處理、正在批示、正在審核和已經(jīng)完成等各種狀態(tài)。在網(wǎng)絡(luò)游戲中,一個(gè)游戲活動(dòng)存在開始、開玩、正在玩、輸贏等各種狀態(tài)。使用狀態(tài)模式就可以實(shí)現(xiàn)游戲狀態(tài)的總控,而游戲狀態(tài)決定了游戲的各個(gè)方面。

策略模式(Strategy Pattern)
策略模式提供了替代派生的子類,并定義類的每個(gè)行為,剔除了代碼中條件的判斷語句,使得擴(kuò)展和結(jié)合新的行為變得更容易,根本不需要變動(dòng)應(yīng)用程序。策略模式可以避免使用多重條件轉(zhuǎn)移語句,系統(tǒng)變得更新靈活。應(yīng)用策略模式會(huì)產(chǎn)生很多子類,這符合高內(nèi)聚的責(zé)任分配模式。

訪問者模式(Visitor Pattern)
Visitor(訪問者)模式使得增加新的操作變得容易,它可以收集有關(guān)聯(lián)的方法,而分離沒有關(guān)聯(lián)的方法,特別適用于分離因?yàn)椴煌蚨兓氖挛铮纭霸谀腥酥蟹蛛x出男孩”。但Visitor模式常常要打破對(duì)象的封裝性,visitor與element需要達(dá)成某些共識(shí)。





    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    丝袜av一区二区三区四区五区| 激情五月综五月综合网| 91熟女大屁股偷偷对白| 国产欧美日韩精品自拍 | 清纯少妇被捅到高潮免费观看| 五月婷婷欧美中文字幕| 久久国产精品亚州精品毛片| 九九视频通过这里有精品| 十八禁日本一区二区三区| 成人精品一区二区三区在线| 91亚洲人人在字幕国产| 久久99夜色精品噜噜亚洲av| 日本高清不卡一二三区| 91日韩欧美中文字幕| 亚洲视频偷拍福利来袭| 国产日韩欧美在线播放| 国产精品99一区二区三区| 91久久精品国产一区蜜臀| 老司机精品视频免费入口| 国产日韩精品欧美综合区| 欧美一区二区三区99| 又黄又色又爽又免费的视频| 欧美又黑又粗大又硬又爽| 美日韩一区二区精品系列 | 夫妻性生活真人动作视频| 日韩精品视频免费观看| 亚洲一区二区三区三州| 在线视频三区日本精品| 成人你懂的在线免费视频| 亚洲一区二区三区三州| 偷拍偷窥女厕一区二区视频| 国产三级欧美三级日韩三级| 美女极度色诱视频在线观看| 亚洲婷婷开心色四房播播| 后入美臀少妇一区二区| 午夜福利视频六七十路熟女| av在线免费观看一区二区三区 | 精品人妻少妇二区三区| 精品al亚洲麻豆一区| 久久中文字人妻熟女小妇| a久久天堂国产毛片精品|