![大話設計模式總結[數(shù)據(jù)參考]_第1頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/23/86076c15-46d4-4db1-b261-f48ac2be44dc/86076c15-46d4-4db1-b261-f48ac2be44dc1.gif)
![大話設計模式總結[數(shù)據(jù)參考]_第2頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/23/86076c15-46d4-4db1-b261-f48ac2be44dc/86076c15-46d4-4db1-b261-f48ac2be44dc2.gif)
![大話設計模式總結[數(shù)據(jù)參考]_第3頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/23/86076c15-46d4-4db1-b261-f48ac2be44dc/86076c15-46d4-4db1-b261-f48ac2be44dc3.gif)
![大話設計模式總結[數(shù)據(jù)參考]_第4頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/23/86076c15-46d4-4db1-b261-f48ac2be44dc/86076c15-46d4-4db1-b261-f48ac2be44dc4.gif)
![大話設計模式總結[數(shù)據(jù)參考]_第5頁](http://file1.renrendoc.com/fileroot_temp2/2021-2/23/86076c15-46d4-4db1-b261-f48ac2be44dc/86076c15-46d4-4db1-b261-f48ac2be44dc5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、類圖備注:.public、-private、#protect、棒棒糖表示接口 2. 繼承關系(空心三角+實線)- - - - 實現(xiàn)接口(空心三角+虛線) 關聯(lián)(實線箭頭)- - - - - 依賴(虛線箭頭) 聚合關系(空心菱形+實線箭頭) 組合關系(實心菱形+實線箭頭)1、簡單工廠2、 策略者模式3、 單一原則4、 開放封閉原則:軟件實體(類、模塊、函數(shù)等)應該可以擴展,但是不能修改5.1、依賴倒轉原則:a抽象不應該依賴細節(jié),細節(jié)應該依賴抽象(針對接口變成,不要對實現(xiàn)編程);b高層模塊不應該依賴低層模塊。兩個都應該依賴抽象5.2、里氏替換原則依賴倒轉其實可以說是面向對象設計的標志,用哪種語言來
2、編寫程程不重要,如果編寫的時候考慮的都是如何針對抽象編程而不是對細節(jié)編程,即程序中所有的依賴關系都是終止于抽象類或者接口,那就是面向對象的設計,反之那就是過程化的設計了6、 裝飾模式:動態(tài)的給一個對象添加額外的職責,就增加功能來說,裝飾模式比生成子類更加靈活。裝飾模式是為已有功能動態(tài)地添加更多功能的一種方式。7、 代理模式:為其他對象提供一種代理以控制對這個對象的訪問8、工廠方法:定義一個用于創(chuàng)建對象的接口,讓子類覺得實例化哪一個類。工廠方法使一個類的實例化延遲到其子類簡單工廠模式的最大優(yōu)點在于工廠類中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動態(tài)實例化相關的類,對于客戶端來說,去除了與具體產(chǎn)
3、品的依賴9、原型模式:原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。一般在初始化的信息不發(fā)生變化的情況下,克隆是最好的辦法,這既隱藏了對象創(chuàng)建的細節(jié),又對性能是大大的提高(等于不用重新初始化對象,而是動態(tài)地獲得對象運行時的狀態(tài))9.2、淺復制與深復制MemberwiseClone()方法是這樣,如果自定是指類型的,則對該字段執(zhí)行逐位復制,如果字段是引用類型,則復制引用但不復制引用的對象,因此原始對象及其副本引用同一對象。淺復制:被復制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用都仍然指向原來的對象;深復制:把引用的對象的變量指向復制過的新對象,而不是原有的
4、被引用的對象10、模板方法模式:當我們要完成在某一個細節(jié)次一致的一個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現(xiàn)可能不同時,我們通??紤]用模板方法模式來處理。模板方法模式就是通過把不變行為搬移到超類,去除子類中的重復代碼來體現(xiàn)他的優(yōu)勢。就是提供了一個很好的代碼復用平臺。當不變的和可變的行為在方法的子類實現(xiàn)中混合在一起的時候,不變的行為就會在子類中的重復出現(xiàn)。我們通過模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重復的不變行為的糾纏。11、迪米特法則(最少知識原則):如果兩個類不必彼此直接通信,那么這兩個類就不應當發(fā)生直接的相互作用。如果其中一個類需要調(diào)用另一個類的某一個方法
5、的話,可以通過第三者轉發(fā)這個調(diào)用。迪米特法則首先強調(diào)的前提是在類的結構設計上,每一個類都應當盡量降低成員的訪問權限。根本思想是強調(diào)了類之間的松耦合。類之間的耦合越弱,越有利于復用,一個處在弱耦合的類被修改,不會對有關系的類造成波及12、外觀模式:為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用首先,在設計初期階段,應該要有意識的將不同的兩個層分離,層與層之間建立外觀facade;其次,在開發(fā)階段,子系統(tǒng)往往因為不斷的重構演化而變得越來越復雜,增加外觀facade可以提供一個簡單的接口,減少他們之間的依賴;第三,在維護一個遺留的大型系統(tǒng)時,可能
6、這個系統(tǒng)已經(jīng)非常難以維護和擴展。為新系統(tǒng)開發(fā)一個外觀facade類,來提供設計粗糙或高度復雜的遺留代碼的比較清晰簡單的接口,讓新系統(tǒng)與facade對象交互,facade與遺留代碼交互所有復雜的工作。13、建造者模式:將一個復雜對象的構建與它的表示分離,使用同樣的構建過程可以創(chuàng)建不同的表示。主要是用于創(chuàng)建一些復雜的對象,這些對象內(nèi)部構建間的建造順序通常是穩(wěn)定的,但對象外部的構建通常面臨著復雜的變化。建造者模式的好處就是使得建造代碼與表示代碼分離,由于建造者隱藏了該產(chǎn)品是如何組裝的,所有若需要改變一個產(chǎn)品的內(nèi)部表示,只需要再定義一個具體的建造者就可以了。建造者模式是在創(chuàng)建復雜對象的算法應該獨立于該
7、對象的組成部分以及它們的裝配方式時適用的模式。14、觀察者模式:定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)發(fā)生變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。特點:將一個系統(tǒng)分割成一系列相互協(xié)作的類有一個很不好的副作用,那就是需要維護相關對象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴展和重用都帶來不便使用地方:當一個對象的改變需要同時改變其他對象,而且不知道具體有多少對象有待改變時,應該考慮使用觀察者模式。當一個抽象模型有兩個方面,其中一方面依賴于另一方面,這時用觀察者模式可以講這兩者封裝在獨立的對象中使他們各種獨
8、立地改變和復用。觀察者模式所做的工作就是解除耦合,讓耦合的雙方都依賴于抽象,而不是依賴于具體。從而使得各自的變化都不會影響另一邊的變化。委托就是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。委托方法的使用可以向其他任何方法一樣,具有參數(shù)和返回值。委托可以看作是對函數(shù)的抽象,是函數(shù)的類,委托的實例將代表一個具體的函數(shù)15、抽象工廠模式:提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定它們具體的類好處:1、易于交換產(chǎn)品系列,由于具體工廠類,在一個應用中只需要再初始化的時候出現(xiàn)一次,這就使得改變一個應用的具體工廠變得非常容易,他只需要改變具體工廠即可使用不同的產(chǎn)品
9、配置。2、讓具體的創(chuàng)建實例過程與客戶端分離,客戶端是通過他們的抽象接口操作實例,產(chǎn)品的具體類名也被具體工廠的實現(xiàn)分離,不會出現(xiàn)在客戶代碼中。缺點:新增時修改比較復雜。編程方式:依賴注入(反射)。命名空間using System.Reflection可以代替簡單工廠16、狀態(tài)模式:當一個對象的內(nèi)在狀態(tài)改變時允許改變其行為,這個對象看起來像是改變了其類。主要解決的是當控制一個對象狀態(tài)轉換的條件表達式過于復雜時的情況。把狀態(tài)的判斷邏輯轉移到表示不同狀態(tài)的 一系列類當中,可以把復雜的判斷邏輯簡化。好處:將特定的狀態(tài)相關的行為都放入一個對象中,由于所有與狀態(tài)相關的代碼都存在于某個ConcreteStat
10、e中,所有通過定義新的子類可以很容易地增加新的狀態(tài)和轉換。目的就是為了消除龐大的條件分支語句。狀態(tài)模式通過把各種狀態(tài)轉移邏輯分不到state的子類之間,來減少相互間的依賴。使用情景:當一個對象的行為取決于他的狀態(tài),并且他必須在運行時刻根據(jù)狀態(tài)改變他的行為時,就可以考慮使用狀態(tài)模式17、適配器模式:將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些類可以一起工作。(類適配器模式和對象適配器模式)在軟件開發(fā)中,也就是系統(tǒng)的數(shù)據(jù)和行為都正確,但接口不符時,我們應該考慮適配器,目的是使控制范圍之外的一個原有對象與某個接口匹配。適配器模式主要應用于希
11、望復用一些現(xiàn)存的類,但是接口又與復用環(huán)境要求不一致的情況。使用場景:使用一個已經(jīng)存在的類,但如果它的接口,也就是它的方法和你的需求不相同時,就應該考慮用適配器模式。兩個類所做的事情相同或相似,但是具有不同的接口時需要使用它,客戶端代碼統(tǒng)一調(diào)用同一接口就行了,這樣可以更簡單,更直接,更緊湊DataAdapter用作dataset和數(shù)據(jù)源之間的適配器以便檢索和保存數(shù)據(jù)。Dataadapter通過映射Fill(這更改了DataSet中的數(shù)據(jù)以便與數(shù)據(jù)源中的數(shù)據(jù)相匹配)和Update(這更改了數(shù)據(jù)源中的數(shù)據(jù)以便與DataSet中的數(shù)據(jù)相匹配)來提供這一適配器。18、備忘錄(memento):在不破壞封
12、裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可以將該對象恢復到原先保存的狀態(tài)。Memento模式比較適用于功能比較復雜的,但需要維護或記錄屬性歷史的類,或者需要保存的屬性只是眾多屬性中的一小部分時,可以根據(jù)保存的Memento信息還原到前一狀態(tài)。如果在某個系統(tǒng)中使用命令模式時,需要實現(xiàn)命令的撤銷功能,那么命令模式可以使用備忘錄模式來存儲可撤銷操作的狀態(tài)。19、組合模式:將對象組合成樹形結構以表示部分-整體的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。透明方式與安全方式:透明方式就是說在Component中聲明所有用來管理子對象的方法,其中包括
13、Add、Remove等。這樣實現(xiàn)Component接口的所有子類都具備了Add和Remove。這樣做多久好處就是葉節(jié)點和枝節(jié)點對于外界沒有區(qū)別,他們具備完全一致的行為接口。但問題很明顯,因為Leaf類本事不具備Add()、Remove()方法的功能,所以實現(xiàn)它是沒有意義的。安全方式就是在Component接口中不去聲明Add和Remove方法,那么子類的Leaf也就不需要去實現(xiàn)它,而是在Composite聲明所有用來管理子類對象的方法,不過由于不夠透明,所以樹葉和樹枝類將不具有相同的接口,客戶端的調(diào)用需要做相應判斷,帶來了不便。組合模式使用場景:需求中是體現(xiàn)部分與整體層次的結構時,希望用戶可以
14、忽略組合對象與單個對象的不同,統(tǒng)一地使用組合結構中的所有對象時,就應該考慮用組合模式了。好處:基本對象可以被組合成更復雜的組合對象,而這個組合對象又可以被組合,這樣不斷地遞歸下去,客戶代碼中看,任何用到基本對象的地方都可以使用組合對象了。用戶是不用關心到底是處理一個葉節(jié)點還是處理一個組合組件,也就不用著為定義組合而寫一些選擇判斷語句了。組合模式讓客戶可以一致地使用組合結構和單個對象。20、迭代器模式:提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內(nèi)部表示。當你需要訪問一個聚集對象,而且不管這些對象時什么都需要遍歷的時候,你就應該考慮迭代器模式。(foreach in)好處:當你
15、需要對聚集有多種方式遍歷時,可以考慮用迭代器模式.NET的迭代器實現(xiàn):IEumerator支持對非泛型集合的接口迭代接口迭代器(Iterator)模式就是分離了集合對象的遍歷行為,抽象出一個迭代器類來負責,這樣既可以做到不暴露集合的內(nèi)部結構,又可讓外部代碼透明地訪問集合內(nèi)部的數(shù)據(jù)。21、單例模式:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。通常我們可以讓一個全局變量使得一個對象被訪問,但他不能防止你實例化多個對象。一個最好的辦法就是,讓類自身負責保存它的唯一實例。這個類可以保存沒有其他實例可以被創(chuàng)建,并且它可以提供一個訪問該實例的方法。單例模式因為Singleton類封裝它的唯一實例
16、,這樣它可以嚴格地控制客戶怎樣訪問它以及何時訪問它。簡單地說就是對唯一實例的受控訪問。Lock是確保當一個線程位于代碼的臨界區(qū)時,另一個線程不進入臨界區(qū)。如果其他線程視圖進入鎖定的代碼,則它將一直等待(即被阻止),直到該對象被釋放。(單鎖和雙重鎖定)C#與公共語言運行庫也提供了一種靜態(tài)初始化方法,這種方法不需要開發(fā)人員顯式地編寫線程安全代碼,即可解決多線程環(huán)境下它是不安全的問題(sealed和readonly)。這種靜態(tài)初始化的方式是在自己被加載時就將自己實例化,所以被形象地稱之為餓漢式單例類;要在第一次被引用時,才會將自己實例化,所以就被成為懶漢式單例類。22.1、橋接模式:將抽象部分與它的
17、實現(xiàn)部分分離,使她們都可以獨立地變化。什么叫抽象與它的實現(xiàn)分離,這并不是說,讓抽象類與其派生類分離,因為這是沒有任何意義。實現(xiàn)指的是抽象類和它的派生類用來實現(xiàn)自己的對象實現(xiàn)系統(tǒng)可能有多角度分類,每一種分類都有可能變化,那么就把這種多角度分離出來讓它們獨立變化,減少它們之間的耦合。只要真正深入地理解了設計原則,很多設計模式其實就是原則的應用而已,或許在不知不覺中就在使用設計模式了。對象的繼承關系是在編譯時就定義好了,所以無法運行時改變從父類繼承的實現(xiàn)。子類的實現(xiàn)與它的父類有非常緊密的依賴關系,以至于父類實現(xiàn)中的任何變化必然會導致子類發(fā)生變化。當你需要復用子類時,如果繼承下來的實現(xiàn)不適合解決新的問
18、題,則父類必須重寫或被其他更合適的類替換。這種依賴關系限制了靈活性并最終限制了復用性22.2合成/聚合復用原則:盡量使用合成/聚合,盡量不要使用類繼承。聚合表示一種弱的擁有關系,體現(xiàn)的是A對象可以包含B對象,但B對象不是A對象的一部分;合成則是一種強的擁有關系,體現(xiàn)了嚴格的部分和整體的關系,部分和整體的生命周期一樣。好處:優(yōu)先使用對象的合成/聚合將有助于保持每個類被封裝,并被集中在單個任務上。這樣類和類繼承層次會保持較小規(guī)模,并且不太可能增長為不可控制的龐然大物23、命令模式:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數(shù)化;請求排隊或記錄請求日志,以及支持可撤銷的操作。優(yōu)點:
19、第一,它能較容易地設計一個命令隊列;第二,在需要的情況下,可以叫容易地將命令記入日志;第三,允許接收請求的一方?jīng)Q定是否要否決請求;第四,可以容易地實現(xiàn)對請求的撤銷和重做;第五,由于加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易。最關鍵的優(yōu)點是命令模式把請求一個操作的對象與知道怎么執(zhí)行一個操作的對象分割開敏捷開發(fā)原則告訴我們,不要為代碼添加基于猜測的,實際不需要的功能。如果不清楚一個系統(tǒng)是否需要命令模式,一般就不要著急去實現(xiàn)他,事實上,在需要的時候通過重構實現(xiàn)這個模式并不困難,只有在真正需要如撤銷/恢復操作等功能時,把原來的代碼重構為命令模式才有意義24、職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關系。將這個對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。好處:當客戶提交一個請求時,請求時沿鏈傳遞直至有一個對象負責處理它。使得接收者和發(fā)送者都沒有對方的明確信息,且鏈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湛江幼兒師范專科學?!稊?shù)據(jù)庫原理及其醫(yī)學應用》2023-2024學年第二學期期末試卷
- 陽光學院《信息記錄技術》2023-2024學年第二學期期末試卷
- 全球人形機器人市場概況
- 統(tǒng)編版語文四年級下冊第二單元任務群整體公開課一等獎創(chuàng)新教學設計
- AI在醫(yī)學影像分析中的應用
- 人工智能AI對人形機器人發(fā)展的影響
- 惠州學院《勞動通論》2023-2024學年第二學期期末試卷
- 黑龍江三江美術職業(yè)學院《數(shù)據(jù)挖掘B》2023-2024學年第二學期期末試卷
- 常州機電職業(yè)技術學院《管理學概論》2023-2024學年第二學期期末試卷
- 萍鄉(xiāng)學院《小稅種與稅收征管》2023-2024學年第二學期期末試卷
- 七年級歷史下冊第2課唐朝建立與貞觀之治
- 8.3+區(qū)域性國際組織+課件高中政治統(tǒng)編版選擇性必修一當代國際政治與經(jīng)濟
- 2025年國網(wǎng)陜西省電力限公司高校畢業(yè)生招聘1100人(第二批)高頻重點提升(共500題)附帶答案詳解
- 《深度學習的7種有力策略》
- 遼寧中醫(yī)藥大學附屬醫(yī)院社會招聘真題
- 2025年潞安化工集團招聘筆試參考題庫含答案解析
- 幼兒園一日生活安全課件
- 《認罪認罰案件被追訴人反悔應對機制研究》
- 多旋翼無人飛行器嵌入式飛控開發(fā)實戰(zhàn)-基于STM32系列微控制器的代碼實現(xiàn)
- 國家開放大學護理社會實踐報告
- 采購經(jīng)理年終述職報告
評論
0/150
提交評論