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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式的理解:对23个设计模式的总结

發(fā)布時間:2024/10/14 asp.net 153 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式的理解:对23个设计模式的总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


設(shè)計模式名 ,鏈接可用

文檔可下載:https://download.csdn.net/download/superSmart_Dong/16625368

?
設(shè)計模式意圖適用的場景關(guān)鍵實現(xiàn)過程優(yōu)點缺點備注
1模板模式通常定義出一個穩(wěn)定的骨架,特定的內(nèi)容的實現(xiàn)延遲至子類中去實現(xiàn)易變,容易根據(jù)實際需求改動的代碼塊,對此代碼塊進行延遲到子類中實現(xiàn)不變的算法在基類中保留,易變的算法變成虛函數(shù)由子類實現(xiàn)把不確定部分剝離開來,實現(xiàn)確定的部分。讓將來的調(diào)用者簡單實現(xiàn)不確定的方法就可以達(dá)到想要的效果對調(diào)用者屏蔽了穩(wěn)定的代碼,使調(diào)用者雖了解使用方法但不易理解底層實現(xiàn)的邏輯例如,線程:用戶不需要理解與硬件的關(guān)聯(lián)關(guān)系,只需要知道實現(xiàn)run方法就可以讓程序達(dá)到高效,并行的目的
2策略模式定義一系列算法,把他們用一個個類封裝起來,并使它們可以動態(tài)地相互替換.業(yè)務(wù)場景無法窮舉,卻要根據(jù)不同的場景做出不同的操作。根據(jù)枚舉或者其他標(biāo)志創(chuàng)建具體的派生類。用基類接收派生類,調(diào)用基類的方法。減少了if..else的判斷,把各個分支的實現(xiàn)變成了派生類方法的實現(xiàn)。避免代碼臃腫,減小了需求變動、擴展的影響性采用動態(tài)綁定會比編譯時綁定性能低些,但是可以忽略可以窮舉的if...else 可以不需要用策略模式
3觀察者模式當(dāng)下層結(jié)構(gòu)需要向上層結(jié)構(gòu)傳遞信號時,不應(yīng)該將上層的變量傳遞到下層的方式實現(xiàn)。因為下層結(jié)構(gòu)不應(yīng)該依賴于上層結(jié)構(gòu)上層結(jié)構(gòu)接收來自下層結(jié)構(gòu)的信號,而返回值類型又不確定時定義一個對信號操作的接口,信號數(shù)組是下層結(jié)構(gòu)中的成員。上層結(jié)構(gòu)繼承該接口,并將自身添加進下層結(jié)構(gòu)的信號數(shù)組,從而接收下層結(jié)構(gòu)的傳遞的信號下層結(jié)構(gòu)不直接依賴與上層結(jié)構(gòu)?例如進度條展示,下層架構(gòu)需要對 已下載數(shù)量占總大小的百分比傳遞到上層。但是進度條可以是條狀的也可以菊花狀的,接收信號的數(shù)據(jù)類型并不確定。所以下層將信號傳進接口中,上層結(jié)構(gòu)實現(xiàn)接口方法,操作 接口的輸入?yún)?shù)。
4裝飾模式動態(tài)的給對象擴展一些額外的職責(zé)給基類添加功能后還是屬于基類的范疇定義一個功能裝飾類繼承基類,同時成員屬性又包含基類類型。具體功能類繼承裝飾類,實現(xiàn)基類的方法,在實現(xiàn)過程中先實現(xiàn)自身的邏輯,最后再調(diào)用基類的方法。而成員基類抽象對象的賦值通過構(gòu)造函數(shù)實現(xiàn)。定義一個功能類,將原先的派生類傳遞到功能對象中,功能對象調(diào)用方法就可以達(dá)到目的。此模式可以隨意組合任意的方法,擺脫了繼承的濫用?例如文件流,網(wǎng)絡(luò)流都繼承流這個對象,現(xiàn)新增一個加密功能來加密流的讀寫操作。那么這個加密功能封裝成類,繼承于流,并流又是加密類的成員。實現(xiàn)加密流的讀、寫方法后再調(diào)用流的抽象方法。
5橋模式當(dāng)基類從多個不同維度派生時,不同維度間的聯(lián)系應(yīng)該解耦當(dāng)基類需要從多個不同維度派生時將基類的功能按照維度去拆分出不同的基類,各個基類時另外基類的成員將基類的功能按照維度拆分后,各個維度進行了解耦。?例如,一個類中用登錄功能和發(fā)送消息,播放聲音和播放動畫功能。當(dāng)操作系統(tǒng)不一樣時播放聲音和播放動畫的功能不一樣,當(dāng)用戶VIP等級不一樣時登錄功能和發(fā)送消息效果不一樣。那么就需要將類按照者兩個維度進行拆分成兩個基類,這兩個基類相互是對方的成員。
6工廠模式利用抽象類去動態(tài)地創(chuàng)建對象與策略模式配合????
7抽象工廠模式利用抽象類動態(tài)地創(chuàng)建一系列的對象需要動態(tài)地創(chuàng)建一組對象時,每一組中的對象之間有緊密的聯(lián)系對類中的每個對象用工廠模式創(chuàng)建。將創(chuàng)建標(biāo)志用成員變量去存,之后就直接調(diào)用函數(shù)就行用統(tǒng)一的創(chuàng)建標(biāo)志保證了一系列對象間的關(guān)聯(lián)性?例如DBConnection對象和DBCommand對象,不能將SQLConnection和DBCommand創(chuàng)建起來。
8原型方法通過深拷貝克隆出一個新的對象。操作時用新對象去操作,不影響原先對象怕指針傳遞和指針傳遞的間接改變未知代碼的實參實現(xiàn)抽象類的clone方法,進行深拷貝??在C++中還需需要實現(xiàn)深拷貝的拷貝構(gòu)造函數(shù)
9構(gòu)造器模式將一個復(fù)雜對象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示成員參數(shù)之間有一定的關(guān)聯(lián)性,會根據(jù)情況不同初始化不同部分的成員參數(shù)。并不是所有參數(shù)都必須初始化時。創(chuàng)建內(nèi)部類Builder,所有成員拷貝到Builder中,把必須初始化的參數(shù)設(shè)成Builder的構(gòu)造函數(shù),可選初始化的用鏈?zhǔn)絪et進行初始化。最后調(diào)用build方法,build方法把自身傳遞近原對象的構(gòu)造函數(shù)中把復(fù)雜的對象初始化變得簡單。??
10單例模式①一個類只能初始化出一個對象?②保證對象是線程安全的。要求只能被創(chuàng)建一次對象的類所有成員和成員方法設(shè)成靜態(tài),靜態(tài)成員有自身的引用,私有的構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù),靜態(tài)初始化函數(shù)需要保證線程安全。可以用返回局部靜態(tài)對象的方式來保證線程安全,但是在C++11不支持保證了結(jié)構(gòu)的規(guī)范化線程安全是一個難題?
11享元模式使用大量細(xì)粒度對象時,代價過高性能變低的問題粒度大的對象的創(chuàng)建,并且該對象的值經(jīng)常使用的情況對粒度大的對象或者對象屬性用引用的形式封裝起來,用緩存的形式讓對象或者對象屬性減少創(chuàng)建次數(shù)減小創(chuàng)建對象的開銷如果對象屬性每次都不一樣,對應(yīng)的key值每次都不一樣一樣也會創(chuàng)建不少對象?
12門面(外觀)模式避免外部程序直接調(diào)用內(nèi)部方法,對內(nèi)部方法進行有效的屏蔽。對外開放的內(nèi)部方法多。并且容易根據(jù)需求而改變用一個提供些專門進行對外訪問的接口,比如三層架構(gòu)的BLL層???
13代理模式可以新增些特有的操作,而不用去修改原有對象邏輯特例多代理對象繼承于基類且成員有基類的引用,代理類可以實現(xiàn)基類的方法也可以使用基類的方法還可以新增特有的方法。隔絕了外界用戶對實際對象的訪問?例如:銀行卡、存折等不方便讓外界用戶訪問,但是外界用戶想存取錢,可以訪問支票對象。由支票對象間接的操作
14適配器模式為了轉(zhuǎn)變接口方式的一種模式。即通過一個中介,作為兩個不兼容接口之間的橋梁(老接口與新接口),使原先的老對象不僅可以使用自身的老接口,而且還可以通過適配器類,用新接口對老對象進行操作。接口不一致適配器類實現(xiàn)新接口,成員有原始類的引用。??例如電燈工作的輸入是電,如果用人想要讓電燈工作的輸入是聲音.那么定義輸入聲音的接口,適配器實現(xiàn)該接口,輸入是聲音,然后把聲音轉(zhuǎn)成電,最后再調(diào)用電燈的方法
15中介者模式降低多個對象和類之間的通信復(fù)雜性類之間相互引用實體抽象類引用中介抽象接口,實體中介引用所有實體類。實體類中調(diào)用中介方法,并傳入特有的標(biāo)識,實體中介類根據(jù)傳進來特有的標(biāo)識進行不同的處理,可以用策略模式進行搭配減少了原先實體類之間的耦合性實體中介類容易變得臃腫?
16狀態(tài)模式允許對象在內(nèi)部狀態(tài)發(fā)生改變時改變它的行為,對象看起來好像修改了它的類調(diào)用自身方法來改變自身的狀態(tài),又會根據(jù)不同的狀態(tài)來調(diào)用不同的方法。避免if...else顯得臃腫對原先的Context中每個狀態(tài)創(chuàng)建一個狀態(tài)類,狀態(tài)接口類需要實現(xiàn)和Context相同的方法。狀態(tài)類中的每個方法返回值都是下一個狀態(tài)。Context成員有下一個狀態(tài)和狀態(tài)接口的引用。Context方法中就是根據(jù)下一個狀態(tài)來初始化狀態(tài)對象,調(diào)用狀態(tài)對象中的方法并且再獲得下一個狀態(tài)。避免Context類臃腫,狀態(tài)類可以與單例模式進行配合??
17備忘錄模式存儲原先對象的屬性,又稱之為快照。方便之后回退。即游戲進度的存檔和讀檔需要有回退功能的類可以用內(nèi)部類的形式表現(xiàn),成員是原實體中重要的屬性,可以和原型模式搭配??現(xiàn)如今,儲存/讀取對象有更方便的方式。備忘錄模式在如今有些過時。更有效的方式可以替代備忘錄模式,例如對象序列化,對象編碼等。
18組合(整體)模式是用于把一組相似的對象當(dāng)作一個單一的對象進行統(tǒng)一的處理對不同對象類型的批量處理操作建立一個容器類,成員是實體的抽象數(shù)組。并且自身也繼承于抽象類,對于容器來說操作要對抽象數(shù)組進行遍歷遞歸調(diào)用方法,對于非容器來說,專心實現(xiàn)自己的方法就行。??容器相當(dāng)于根節(jié)點,非容器相當(dāng)于葉子節(jié)點。RadioButton,Button,GroupBox的關(guān)系一樣,當(dāng)GroupBox進行disable時,GroupBox包含的RadioButton,Button,GroupBox也一樣要disable
19迭代器模式提供一種方法順序訪問一個集合對象中的各個元素,而又不需要暴露該對象的內(nèi)部表示。遍歷容器又不向暴露內(nèi)部迭代器類成員包含實體的引用,可用構(gòu)造函數(shù)初始化。迭代器中實現(xiàn)最基本的first,next,isdone,currentItem方法,實體類中g(shù)etIterator(){ return MyIterator(*this);}??STL庫中等其他類庫有現(xiàn)成的
20職責(zé)鏈模式為請求創(chuàng)建了一個接收者對象的鏈有連續(xù)傳遞請求的需求通常每個接收者都包含對另一個接收者的引用。判斷自身能否接收請求,如果能就處理不能它就會把相同的請求傳給下一個接收者,依此類推??例如Winform的單擊請求,你想觸發(fā)布局在底層的控件事件時,那么就要設(shè)置上層的控件都無法處理單擊請求
21命令模式把用戶可以觸發(fā)的功能當(dāng)成一個命令方法參數(shù)個數(shù),參數(shù)的數(shù)據(jù)類型,返回值可能不統(tǒng)一。用戶卻想要統(tǒng)一的接口創(chuàng)建用戶想要的命令接口,保留原實體的成員變量和getter&setter。
把方法變成類,并繼承和實現(xiàn)命令接口,成員包含原先的輸入?yún)?shù)和返回值,可用構(gòu)造函數(shù)初始化。
創(chuàng)建命令執(zhí)行類,成員是 List <ICommand*> ,方法是添加ICommand 和遍歷執(zhí)行ICommand中的方法
方法與實體分離,可以被接收者統(tǒng)一處理。??
22訪問器模式改變基類的方法會影響到派生類的實現(xiàn)穩(wěn)定層次結(jié)構(gòu),易變的基類方法需求把原來基類和派生類的實現(xiàn)放在訪問器類中,各個派生類成員包含訪問器的引用,用來訪問這些訪問器的操作方法。而訪問器中的操作方法傳入派生類的實體,對派生類的屬性進行操作,返回值用成員變量保存。這樣要變更操作方法只需要變更具體的訪問器,而不需要變更基類和派生類。?如果層次結(jié)構(gòu)不穩(wěn)定,那么使用訪問者模式就得不償失.?
23解釋器模式定義一個語言,用戶可以用這語言來執(zhí)行相應(yīng)的操作?非終結(jié)符和終結(jié)符的解析。實際的難點是先學(xué)會編譯原理?解析算法才是難點如正則表達(dá)式等

?

?

總結(jié)

以上是生活随笔為你收集整理的设计模式的理解:对23个设计模式的总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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