




已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C#.Net設(shè)計(jì)模式實(shí)例系列文章總結(jié)1 什么是設(shè)計(jì)模式設(shè)計(jì)模式是對(duì)在軟件設(shè)計(jì)過程中重復(fù)出現(xiàn)的問題提出了一種比較好的解決方案。正如一位專家所說:設(shè)計(jì)模式是對(duì)程序設(shè)計(jì)人員經(jīng)常遇到的設(shè)計(jì)問題的可再現(xiàn)的解決方案(The Smalltalk Companion)。GOF設(shè)計(jì)模式通常被認(rèn)為是其他設(shè)計(jì)模式的基礎(chǔ),隨著業(yè)務(wù)復(fù)雜度的增大,會(huì)不斷涌現(xiàn)新的設(shè)計(jì)模式,而這些新的設(shè)計(jì)模式一般會(huì)以GOF模式理論為參照。2 為什么要學(xué)習(xí)設(shè)計(jì)模式從個(gè)人職業(yè)規(guī)劃來考慮。一位軟件開發(fā)工程師隨著編碼量的增加,開發(fā)經(jīng)驗(yàn)的增加,軟件理論理解的加深,會(huì)不由自主地想一些方法或者捷徑,來提高自己的生產(chǎn)率,而不是面對(duì)重復(fù)的問題做相同的工作,當(dāng)你有這種想法的時(shí)候,就需要開始學(xué)習(xí)設(shè)計(jì)模式,設(shè)計(jì)模式會(huì)給你一些比較好的解決方案,不但解決了問題也提升了自己的能力,同時(shí)也是邁向軟件設(shè)計(jì)師和架構(gòu)師的過度階段。從軟件架構(gòu)的角度來考慮。經(jīng)濟(jì)的快速發(fā)展造就了業(yè)務(wù)越來越復(fù)雜,那么如何使軟件適應(yīng)這種復(fù)雜的業(yè)務(wù)變化,在軟件設(shè)計(jì)和架構(gòu)時(shí),適當(dāng)?shù)厥褂迷O(shè)計(jì)模式可以解決此問題,也要注意不要過度使用設(shè)計(jì)模式,否則會(huì)使系統(tǒng)變的更加復(fù)雜。設(shè)計(jì)模式也是代碼重構(gòu)的依據(jù)和工具,建議在代碼的重構(gòu)時(shí),盡量融入設(shè)計(jì)模式。3 設(shè)計(jì)模式原則使用設(shè)計(jì)模式的根本原因是適用變化,提高代碼復(fù)用率,使軟件更具有可維護(hù)性和可擴(kuò)展性。需要遵循以下幾個(gè)原則:?jiǎn)我宦氊?zé)原色、開放封閉原則(Open Closed Principal)、依賴倒置原則、里氏代換原則。3.1單一職責(zé)原則就一個(gè)類而言,應(yīng)該只有一個(gè)引起他變化的原因。如果一個(gè)類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會(huì)消弱或者抑制這個(gè)類完成其他職責(zé)的能力。這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭受到意想不到的破會(huì)。3.2開放封閉原則軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該可以擴(kuò)展,但不可以修改。也就是說對(duì)擴(kuò)展是開放的,對(duì)修改是封閉的。一般來說,面對(duì)需求,對(duì)程序的改動(dòng)是通過添加新代碼進(jìn)行的,而不是更改現(xiàn)有代碼。3.3依賴倒置原則抽象不應(yīng)該以來細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象,也就是提倡的“面對(duì)接口編程,而不是面對(duì)實(shí)現(xiàn)編程”。也可以這樣理解:高層模塊不應(yīng)該依賴底層模塊,兩個(gè)都應(yīng)該抽象;抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。3.4里氏代換原則子類必須能夠替換掉他們的父類型。也就是說,在軟件開發(fā)過程中,子類替換掉父類,程序的功能行為沒有變化。只有當(dāng)子類可以替換掉父類,軟件單位的功能不受到影響時(shí),父類才能真正被復(fù)用,而子類也可以在父類的基礎(chǔ)上增加新的行為。 4 設(shè)計(jì)模式四個(gè)基本要素設(shè)計(jì)模式使人們可以更加簡(jiǎn)單方便地復(fù)用成功的設(shè)計(jì)和體系結(jié)構(gòu),將已證實(shí)的技術(shù)表述成設(shè)計(jì)模式也會(huì)使新加入的系統(tǒng)開發(fā)者更加容易理解其設(shè)計(jì)思路。設(shè)計(jì)模式的基本要素包括模式名稱、問題、解決方案和效果。 4.1模式名稱 一個(gè)助記名稱,用來描述設(shè)計(jì)模式、解決方案和效果。設(shè)計(jì)模式允許在較高的抽象層次上進(jìn)行設(shè)計(jì)?;谝粋€(gè)模式詞匯表,開發(fā)團(tuán)隊(duì)之間可以討論模式并在編寫文檔時(shí)使用它們。模式名稱可以幫助我們思考,便于團(tuán)隊(duì)成員交流設(shè)計(jì)思想及設(shè)計(jì)結(jié)果。找到合適的模式名稱也是設(shè)計(jì)模式編目工作的難點(diǎn)之一。 4.2問題 問題主要描述在何時(shí)使用設(shè)計(jì)模式。它解釋了設(shè)計(jì)問題和問題存在的前因后果、特定的設(shè)計(jì)問題和怎樣用對(duì)象表示算法等。通常情況下,模式必須滿足的一系列先決條件是問題。 4.3解決方案 解決方案描述了設(shè)計(jì)的組成成分、它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。因?yàn)槟J骄拖褚粋€(gè)模板,可應(yīng)用于多種不同場(chǎng)合,所以解決方案并不描述一個(gè)特定具體的設(shè)計(jì)或?qū)崿F(xiàn),而是提供設(shè)計(jì)問題的抽象描述和怎樣用一個(gè)具有一般意義的元素組合(類或?qū)ο蠼M合)來解決這個(gè)問題。 4.4效果 描述了模式應(yīng)用的效果及使用模式權(quán)衡的問題。盡管描述設(shè)計(jì)決策時(shí),并不是總提到模式效果,但它們對(duì)于評(píng)價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及優(yōu)勢(shì)具有重要意義。軟件效果大多關(guān)注對(duì)時(shí)間和空間的衡量,它們也表述了語(yǔ)言和實(shí)現(xiàn)問題。因?yàn)閺?fù)用是面向?qū)ο笤O(shè)計(jì)的要素之一,所以模式效果包括它對(duì)系統(tǒng)靈活性、擴(kuò)充性或可移植性的影響,顯式地列出這些效果對(duì)理解和評(píng)價(jià)這些模式很有幫助。5 設(shè)計(jì)模式分類設(shè)計(jì)模式主要分為創(chuàng)建性模式(Creational Patterns)、結(jié)構(gòu)性模式(Structural Patterns)、行為性模式(Behavioral Patterns)。5.1創(chuàng)建性模式(Creational Patterns)5.1.1 Net設(shè)計(jì)模式實(shí)例之簡(jiǎn)單工廠模式(Simple Factory Pattern)簡(jiǎn)單工廠模式(Simple Factory Pattern)的優(yōu)點(diǎn)是,工廠類中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動(dòng)態(tài)實(shí)例化相關(guān)的類,對(duì)于客戶端來說,去除了與具體產(chǎn)品的依賴5.1.2 Net設(shè)計(jì)模式實(shí)例之抽象工廠模式(Abstract Factory Pattern)抽象工廠模式(Abstract Factory Pattern),提供一個(gè)創(chuàng)建一系列相關(guān)或者相互依賴對(duì)象的接口,而無需制定他們的具體類。抽象工廠模式的典型應(yīng)用就是,使用抽象工廠+反射+配置文件實(shí)現(xiàn)數(shù)據(jù)訪問層程序5.1.3 Net設(shè)計(jì)模式實(shí)例之單例模式( Singleton Pattern)單例模式(Singleton Pattern),保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。單例模式因?yàn)镾ingleton封裝它的唯一實(shí)例,它就可以嚴(yán)格地控制客戶怎樣訪問它以及何時(shí)訪問它。5.1.4 Net設(shè)計(jì)模式實(shí)例之建造者模式(Builder Pattern)建造者模式(Builder Pattern),將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使的同樣的構(gòu)建過程可以創(chuàng)建不同的表示。建造者模式是在當(dāng)創(chuàng)建復(fù)雜對(duì)象的算法應(yīng)該獨(dú)立于該對(duì)象的組成部分以及他們的裝配方式時(shí)適用的模式5.1.5 Net設(shè)計(jì)模式實(shí)例之原型模式( Prototype Pattern)原型模式(Prototype Pattern):用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并通過拷貝這些原型創(chuàng)建新的對(duì)象。Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype。淺復(fù)制與深復(fù)制區(qū)別:淺復(fù)制,被復(fù)制的所有變量都還有與原來對(duì)象相同的值,而所有的對(duì)其他對(duì)象的引用都仍然指向原來的對(duì)象。深復(fù)制,把引用對(duì)象的變量指向復(fù)制過的新對(duì)象,而不是原有的被引用的對(duì)象。Net命名空間System提供了一個(gè)IConeable接口,此接口只有一個(gè)方法Clone(),只需要實(shí)現(xiàn)這個(gè)接口就可以實(shí)現(xiàn)原型模式(Prototype Pattern)了5.2結(jié)構(gòu)性模式(Structural Patterns)5.2.1 Net設(shè)計(jì)模式實(shí)例之適配器模式(Adapter Pattern)適配器模式,將一個(gè)類裝換成客戶期望的另外一個(gè)接口。Adapter模式統(tǒng)一了不兼容對(duì)象的接口,使的原本由于接口不兼容而不能工作的那些類可以一起工作。5.2.2 Net設(shè)計(jì)模式實(shí)例之橋接模式( Bridge Pattern)橋接模式(Bridge Pattern),將抽象部分與它的實(shí)現(xiàn)部分分離,使的抽象和實(shí)現(xiàn)都可以獨(dú)立地變化。Decouple an abstraction from its implementation so that the two can vary independently.。什么是聚合/組合:聚合(Aggregation),當(dāng)對(duì)象A被加入到對(duì)象B中,成為對(duì)象B的組成部分時(shí),對(duì)象B和對(duì)象A之間為聚合關(guān)系。聚合是關(guān)聯(lián)關(guān)系的一種,是較強(qiáng)的關(guān)聯(lián)關(guān)系,強(qiáng)調(diào)的是整體與部分之間的關(guān)系。5.2.3Net設(shè)計(jì)模式實(shí)例之組合模式(Composite Pattern)組合模式,將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。解決整合與部分可以被一致對(duì)待問題。5.2.4 Net設(shè)計(jì)模式實(shí)例之裝飾者模式(Decorator Pattern)裝飾模式,給一個(gè)對(duì)象動(dòng)態(tài)添加額外職責(zé),這些職責(zé)需要由用戶決定加入的方式和時(shí)機(jī)。裝飾模式提供了“即插即用”的方式,在運(yùn)行期間決定何時(shí)增加何種功能。就增加功能來說,裝飾模式比生成子類更加靈活。5.2.5 Net設(shè)計(jì)模式實(shí)例之外觀模式(Faade Pattern)外觀模式,為子系統(tǒng)的一組接口提供一個(gè)統(tǒng)一的界面,此模式定義了一個(gè)高層接口,這一個(gè)高層接口使的子系統(tǒng)更加容易使用。外觀模式可以解決層結(jié)構(gòu)分離、降低系統(tǒng)耦合度和為新舊系統(tǒng)交互提供接口功能。5.2.6 Net設(shè)計(jì)模式實(shí)例之享元模式( Flyweight Pattern)享元模式(Flyweight Pattern),運(yùn)用共享技術(shù)有效支持大量細(xì)粒度的對(duì)象。Use sharing to support large numbers of fine-grained objects efficiently. 享元模式可以避免大量非常相似類的開銷。在程序設(shè)計(jì)中有時(shí)需要生成大量細(xì)粒度的類實(shí)例來表示數(shù)據(jù)。如果發(fā)現(xiàn)這些實(shí)例除了幾個(gè)參數(shù)外基本傷都是相同的,有時(shí)就能夠受大幅度第減少需要實(shí)例化的類的數(shù)量。如果能把這些參數(shù)移到類實(shí)例外面,在方法調(diào)用時(shí)將他們傳遞進(jìn)來,就可以通過共享大幅度地減少單個(gè)實(shí)例的數(shù)目。享元對(duì)象的內(nèi)部狀態(tài)與外部狀態(tài):內(nèi)部狀態(tài),在享元對(duì)象的內(nèi)部并且不會(huì)隨環(huán)境改變而改變的共享部分。外部狀態(tài),隨環(huán)境改變而改變的,不可以共享的狀態(tài)。5.2.7 Net設(shè)計(jì)模式實(shí)例之代理模式(Proxy Pattern)代理模式(Proxy Pattern)對(duì)其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問。5.3行為性模式(Behavioral Patterns)Net設(shè)計(jì)模式實(shí)例之職責(zé)鏈模式(Chain Of Responsibility)后期補(bǔ)此節(jié)5.3.1Net設(shè)計(jì)模式實(shí)例之命令模式(Command Pattern)命令模式(Command Pattern)將請(qǐng)求封裝為一個(gè)對(duì)象,從而使你用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化,對(duì)請(qǐng)求排隊(duì)或紀(jì)錄請(qǐng)求日志,以及支持可撤銷的操作。當(dāng)需要有撤銷或者恢復(fù)操作時(shí),可以考慮使用命令模式.5.3.2Net設(shè)計(jì)模式實(shí)例之解釋器模式(Interpreter Pattern)解釋器模式(Interpreter Pattern),給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來解釋語(yǔ)言中的句子。當(dāng)有一個(gè)語(yǔ)言需要解釋執(zhí)行,并且你可將該語(yǔ)言中的句子表示為一個(gè)抽象的語(yǔ)法樹時(shí),可以考慮使用解釋器模式。5.3.3 Net設(shè)計(jì)模式實(shí)例之迭代器模式(Iterator Pattern)迭代器模式(Iterator Pattern),提供一種方法順序訪問一個(gè)聚合對(duì)象中元素,而不暴露改集合對(duì)象的內(nèi)部表示。迭代器模式就是分離了集合對(duì)想的遍歷行為,抽象出一個(gè)迭代器類來負(fù)責(zé),這樣即可以不暴露集合的內(nèi)部機(jī)構(gòu),又可讓外部代碼透明地訪問集合內(nèi)部的數(shù)據(jù).5.3.4 Net設(shè)計(jì)模式實(shí)例之中介者模式(Mediator Pattern)中介者模式(Mediator Pattern),定義一個(gè)中介對(duì)象來封裝系列對(duì)象之間的交互。中介者使各個(gè)對(duì)象不需要顯示地相互引用,從而使其耦合性松散,而且可以獨(dú)立地改變他們之間的交互。中介者模式一般應(yīng)用于一組對(duì)象以定義良好但是復(fù)雜的方法進(jìn)行通信的場(chǎng)合,以及想定制一個(gè)分布在多個(gè)類中的行為,而不想生成太多的子類的場(chǎng)合.5.3.5 Net設(shè)計(jì)模式實(shí)例之備忘錄模式(Memento Pattern)備忘錄模式(Memento Pattern),在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可以就該對(duì)象恢復(fù)到原先保存的狀態(tài)。當(dāng)系統(tǒng)功能比較復(fù)雜,而且需要記錄歷史屬性以便當(dāng)需要時(shí)做恢復(fù)動(dòng)作。Originator可以根據(jù)保存的Memento信息還原到前一狀態(tài)。5.3.6Net設(shè)計(jì)模式實(shí)例之觀察者模式(Observer Pattern)觀察者模式定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一個(gè)主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化的時(shí),會(huì)通知所有觀察者對(duì)象,使他們能夠自動(dòng)更新自己。解決的是“當(dāng)一個(gè)對(duì)象的改變需要同時(shí)改變其他對(duì)象的時(shí)候”問題。最后以股票實(shí)例進(jìn)一步闡述了觀察者模式。5.3.7Net設(shè)計(jì)模式實(shí)例之狀態(tài)模式(State Pattern)狀態(tài)模式(State Pattern),當(dāng)一個(gè)對(duì)象的內(nèi)在狀態(tài)改變時(shí)允許改變其行為,這個(gè)對(duì)象看起來像是改變了其類。當(dāng)一個(gè)對(duì)象行為取決于它的狀態(tài),并且它必須在運(yùn)行時(shí)刻根據(jù)狀態(tài)改變它的行為時(shí),就可以考慮使用狀態(tài)模式了.Net設(shè)計(jì)模式實(shí)例之策略模式(Strategy Pattern)后期補(bǔ)此節(jié)5.3.8Net設(shè)計(jì)模式實(shí)例之模板方法模式(Template Mothed Pattern)模板方法模式(Template Method Pattern),定義一個(gè)操作中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可以重定義算法的某些特定步驟。模板方法模式把不變行為搬移到超類,從而去除子類中的重復(fù)代碼,實(shí)際上模板方法模式就是提供了一個(gè)代碼復(fù)用平臺(tái)。要完成在某一細(xì)節(jié)上層次一致的一個(gè)過程或一系列步驟,但個(gè)別步驟在更詳細(xì)的層次上實(shí)現(xiàn)不同時(shí),可以使用模版方法模式解決問題。5.3.9Net設(shè)計(jì)模式實(shí)例之訪問者模式(Visitor Pattern)訪問者模式表示一個(gè)作用于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療機(jī)構(gòu)行政部門職責(zé)
- 2025部編二年級(jí)語(yǔ)文下冊(cè)課程教學(xué)計(jì)劃
- 牛津譯林版一年級(jí)上冊(cè)英語(yǔ)班級(jí)管理計(jì)劃
- 一年級(jí)班務(wù)教學(xué)素質(zhì)教育工作計(jì)劃
- 2025年裝飾公司營(yíng)銷策略工作計(jì)劃
- 六年級(jí)道德與法治學(xué)習(xí)能力提升計(jì)劃
- 以形啟思:知識(shí)可視化視覺表征工具在初中物理概念教學(xué)中的創(chuàng)新實(shí)踐
- 以學(xué)生為主體的小學(xué)英語(yǔ)課外作業(yè)創(chuàng)新與實(shí)踐研究
- 新課標(biāo)信息技術(shù)學(xué)習(xí)心得體會(huì)
- 國(guó)有企業(yè)資金管理機(jī)制完善問題及措施
- 質(zhì)量檢驗(yàn)(測(cè))技術(shù)服務(wù)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 信息必刷卷04(廣東省卷專用)2025年中考數(shù)學(xué)(解析版)
- 餐飲服務(wù)與管理課件 菜單的設(shè)計(jì)與制作
- 核電進(jìn)廠考試題及答案
- 公司員工飲水管理制度
- 山東師范大學(xué)《大學(xué)英語(yǔ)本科(專升本)》期末考試復(fù)習(xí)題及參考答案
- 聲譽(yù)風(fēng)險(xiǎn)培訓(xùn)
- 《SketchUp草圖大師教學(xué)》課件
- 職業(yè)技能培訓(xùn):保健按摩師
- 第二十章手術(shù)減肥及體形塑造美容手術(shù)美容外科學(xué)概論講解
- 2024年消防文員理論考試題庫(kù)(濃縮400題)
評(píng)論
0/150
提交評(píng)論