設(shè)計(jì)模式心得體會(huì)

時(shí)間:2023-05-07 12:05:13 心得體會(huì) 我要投稿

設(shè)計(jì)模式心得體會(huì)

7月初的一個(gè)周末,準(zhǔn)確的說(shuō)應(yīng)該是7月1號(hào)周六,在網(wǎng)上看到一本《大話設(shè)計(jì)模式》的書,而且看到很多很好的評(píng)論,于是乎,下載了電子書看看,一下子看了幾章之后,對(duì)設(shè)計(jì)模式有了個(gè)了解,于是繼續(xù)上網(wǎng)搜些其他資料,進(jìn)一步了解設(shè)計(jì)模式。。。最終結(jié)論:設(shè)計(jì)模式是個(gè)好東西,具體怎么好,一兩句話是無(wú)法概括的,也是從那天起,我就決定學(xué)習(xí)設(shè)計(jì)模式,于是就看《大話設(shè)計(jì)模式》,至七月十多號(hào),大概看了一百多頁(yè)后,感覺(jué)有點(diǎn)難,有點(diǎn)看不下去的感覺(jué),于是上網(wǎng)找其他的好方法,無(wú)意間發(fā)現(xiàn)了李建忠老師的《C#設(shè)計(jì)模式縱橫談》系列講座,微軟的Web Cast課程,主要講解GOF的23個(gè)設(shè)計(jì)模式,每個(gè)一講,加上一頭一尾,共25講,試聽(tīng)了一節(jié)課后,感覺(jué)很有用,于是就抽時(shí)間去邊聽(tīng)課邊看書,并在我的博客里寫下筆記,依賴加深印象,二來(lái)可以督促我的進(jìn)度。。。

三個(gè)月以來(lái),總算把設(shè)計(jì)模式學(xué)完一遍了,原計(jì)劃是兩個(gè)月學(xué)完(一星期三個(gè)模式),由于。。。計(jì)劃兩個(gè)月學(xué)完實(shí)際花了三個(gè)月,感觸多多,收獲多多——對(duì)C#語(yǔ)言有了更進(jìn)一步的認(rèn)識(shí),對(duì)OO的思想有了更全面的了解。。。

設(shè)計(jì)模式心得體會(huì)

下一步在設(shè)計(jì)模式方面的計(jì)劃:鞏固并運(yùn)用設(shè)計(jì)模式,鞏固:把《大話設(shè)計(jì)模式》,《設(shè)計(jì)模式》,《設(shè)計(jì)模式——可復(fù)用的面向?qū)ο蠡A(chǔ)》,《敏捷軟件開(kāi)發(fā):原則、模式與實(shí)踐》這些書再結(jié)合起來(lái)系統(tǒng)的看一看,當(dāng)然還會(huì)去買一些我手頭上沒(méi)有的關(guān)于設(shè)計(jì)模式的書;運(yùn)用:部門前幾天也提倡用C#來(lái)改版VB程序,我想這是一個(gè)很好的平臺(tái),正好有機(jī)會(huì)把理論的東西在實(shí)際中應(yīng)用,理論加實(shí)際——唯一的學(xué)習(xí)方法。。。

下面對(duì)各個(gè)模式再簡(jiǎn)單總結(jié)一下:

1、創(chuàng)建型模式:

Singleton:解決的是實(shí)例化對(duì)象的個(gè)數(shù)的問(wèn)題,比如抽象工廠中的工廠、對(duì)象池等,除了Singleton之外,其他創(chuàng)建型模式解決的都是 new 所帶來(lái)的耦合關(guān)系。

Abstract Factory:創(chuàng)建一系列相互依賴對(duì)象,并能在運(yùn)行時(shí)改變系列。

Factory Method:創(chuàng)建單個(gè)對(duì)象,在Abstract Factory有使用到。

Prototype:通過(guò)拷貝原型來(lái)創(chuàng)建新的對(duì)象。

Factory Method,Abstract Factory, Builder都需要一個(gè)額外的工廠類來(lái)負(fù)責(zé)實(shí)例化“一邊對(duì)象”,而Prototype則是通過(guò)原型(一個(gè)特殊的工廠類)來(lái)克隆“易變對(duì)象”。

如果遇到“易變類”,起初的設(shè)計(jì)通常從Factory Method開(kāi)始,當(dāng)遇到更多的復(fù)雜變化時(shí),再考慮重構(gòu)為其他三種工廠模式(Factory Method,Abstract Factory, Builder)。

2、結(jié)構(gòu)性模式

Adapter:注重轉(zhuǎn)換接口,將不吻合的接口適配對(duì)象,用于舊代碼復(fù)用、類庫(kù)遷移等。

Bridge:注重實(shí)現(xiàn)抽象和實(shí)現(xiàn)的分離,支持對(duì)象多維度的變化。

Composite:注重同意接口,將“一對(duì)多”的關(guān)系轉(zhuǎn)化為“一對(duì)一”的關(guān)系,屏蔽對(duì)象容器內(nèi)部實(shí)現(xiàn)結(jié)構(gòu),實(shí)現(xiàn)對(duì)象和對(duì)象容器使用的一致性。

Decorator:注重穩(wěn)定接口,在此前提下為對(duì)象擴(kuò)展功能,實(shí)現(xiàn)對(duì)象功能的擴(kuò)展,避免子類膨脹。

Facade:注重簡(jiǎn)化接口,屏蔽各子系統(tǒng)的復(fù)雜性,提供更高層接口供客戶訪問(wèn)。

Flyweight:注重保留接口,在內(nèi)部使用共享技術(shù)對(duì)對(duì)象存儲(chǔ)進(jìn)行優(yōu)化(通過(guò)共享大量細(xì)粒度對(duì)象,提供系統(tǒng)性能)。

Proxy:注重假借接口,通過(guò)增加間接代理,實(shí)現(xiàn)更多控制,屏蔽復(fù)雜性。

3 、行為型模式

Template Method:封裝算法結(jié)構(gòu),定義算法骨架,支持算法子步驟變化。

Strategy:注重封裝算法,支持算法的變化,通過(guò)封裝一系列算法,從而可以隨時(shí)獨(dú)立于客戶替換算法。

State:注重封裝與狀態(tài)相關(guān)的行為,支持狀態(tài)的變化,通過(guò)封裝對(duì)象狀態(tài),從而在其內(nèi)部狀態(tài)改變時(shí)改變它的行為。

Memento:注重封裝對(duì)象狀態(tài)變化,支持狀態(tài)保存、恢復(fù)。

Mediator:注重封裝對(duì)象間的交互,通過(guò)封裝一系列對(duì)象之間的復(fù)雜交互,使他們不需要顯式相互引用,實(shí)現(xiàn)解耦。

Chain of Responsibility:注重封裝對(duì)象責(zé)任,支持責(zé)任的變化,通過(guò)動(dòng)態(tài)構(gòu)建職責(zé)鏈,實(shí)現(xiàn)事務(wù)處理。

Command:注重將請(qǐng)求封裝為對(duì)象,支持請(qǐng)求的變化,通過(guò)將一組行為抽象為對(duì)象,實(shí)現(xiàn)行為請(qǐng)求者和行為實(shí)現(xiàn)者之間的解耦。

Iterator:注重封裝特定領(lǐng)域變化,支持集合的變化,屏蔽集合對(duì)象內(nèi)部復(fù)雜結(jié)構(gòu),提供客戶程序?qū)λ耐该鞅闅v。

Interpreter:注重封裝特定領(lǐng)域變化,支持領(lǐng)域問(wèn)題的頻繁變化,將特定領(lǐng)域的問(wèn)題表達(dá)為某種語(yǔ)法規(guī)則下的句子,然后構(gòu)建一個(gè)解釋器來(lái)解釋這樣的句子,從而達(dá)到解決問(wèn)題的目的。

Observer:注重封裝對(duì)象通知,支持通信對(duì)象的變化,實(shí)現(xiàn)對(duì)象狀態(tài)改變,通知依賴它的對(duì)象并更新。

Visitor:注重封裝對(duì)象操作變化,支持在運(yùn)行時(shí)為類結(jié)構(gòu)添加新的操作,在類層次結(jié)構(gòu)中,在不改變各類的前提下定義作用于這些類實(shí)例的新的操作。

正確對(duì)待模式:

設(shè)計(jì)模式建立在對(duì)系統(tǒng)變化點(diǎn)的基礎(chǔ)上進(jìn)行,哪里有變化,哪里就應(yīng)用設(shè)計(jì)模式。

設(shè)計(jì)模式應(yīng)該以演化的方式來(lái)獲得,系統(tǒng)的變化點(diǎn)往往是經(jīng)過(guò)不斷演化才能準(zhǔn)確定位。

不能為了模式而模式,設(shè)計(jì)模式是一種軟件設(shè)計(jì)的軟力量,而非規(guī)范標(biāo)準(zhǔn),不應(yīng)夸大設(shè)計(jì)模式的作用。

------------------

從一開(kāi)始學(xué)習(xí)設(shè)計(jì)模式至今已半年有余了,第一次接觸設(shè)計(jì)模式是一次不經(jīng)意間在網(wǎng)上看到《大話設(shè)計(jì)模式》一書,看了前言了第一章后,就感覺(jué)到其誘惑力對(duì)于一個(gè)程序員來(lái)說(shuō),是無(wú)比巨大的。大概是去年十月份的時(shí)候,部門決定成立讀書會(huì),系統(tǒng)學(xué)習(xí)設(shè)計(jì)模式。

通過(guò)學(xué)習(xí)設(shè)計(jì)模式,除了學(xué)習(xí)到“一些設(shè)計(jì)模式”,還讓我進(jìn)一步熟悉、鞏固了面向?qū)ο笏枷,進(jìn)一步熟悉了C#語(yǔ)言。。。我曾多次設(shè)想,我們?nèi)绻朊嫦驅(qū)ο笏枷,并結(jié)合設(shè)計(jì)模式來(lái)重寫或改善我們的系統(tǒng)(必須重寫,雖說(shuō)設(shè)計(jì)模式只是一種思想,語(yǔ)言只是實(shí)現(xiàn)而已,但是選擇一門好的語(yǔ)言,無(wú)疑也是非常重要的,而VB6在面向?qū)ο蠓矫鎱s有很大欠缺甚至不具備其條件),那么我們的系統(tǒng)將會(huì)像目前一樣需要那么多人來(lái)維護(hù)嗎?

《大話設(shè)計(jì)模式》一書其實(shí)是對(duì)GOF的《設(shè)計(jì)模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書的“翻譯”,讓人更容易理解,用通俗易懂的語(yǔ)言闡述軟件設(shè)計(jì)過(guò)程中的一些“模式”,在某種特定環(huán)境下,用最好的設(shè)計(jì)方法(代碼高內(nèi)聚,低耦合,使其有良好的可擴(kuò)展性和可維護(hù)性)達(dá)到我們的目的,或許其方法有很多很多,但是尋找到最好的方法卻不是件容易的事,設(shè)計(jì)模式是對(duì)前人的設(shè)計(jì)經(jīng)驗(yàn)的一個(gè)總結(jié),告訴我們?cè)谀撤N特定的環(huán)境下,這樣的設(shè)計(jì)師最好的,學(xué)習(xí)設(shè)計(jì)模式有助于我們?cè)谠O(shè)計(jì)軟件的過(guò)程中少走很多彎路。

我對(duì)GOF的23個(gè)設(shè)計(jì)模式雖然都有看過(guò),但是只有理解,實(shí)現(xiàn),應(yīng)用及思考之后,才能真正體會(huì)其精妙之處,至今體會(huì)較深的有以下幾個(gè)模式:1. Strategy——封裝系列“算法”,讓它們之間可以相互替換,“算法”并不是單指數(shù)據(jù)結(jié)構(gòu)中的算法,在實(shí)踐中,它幾乎可以封裝任何類型的規(guī)則,這使得策略模式的運(yùn)用極其廣泛;2. Template Method——有人說(shuō)是用的做多的模式,只要有抽象類的地方,都可以看到這個(gè)模式,它通過(guò)把不變行為移到父類中去,去除子類中的重復(fù)代碼,從而提供了一個(gè)很好的代碼復(fù)用平臺(tái);3. Facade——提供了對(duì)基礎(chǔ)架構(gòu)的統(tǒng)一訪問(wèn),減少?gòu)?fù)雜性,在Web編程者中的三層架構(gòu),就是此思想,每一層都封裝好一部分功能,提供給上一層統(tǒng)一的方法調(diào)用,整個(gè)Framework體系就是Facade模式的封裝,隨著1.0升級(jí)到3.5,越來(lái)越多復(fù)雜的高級(jí)功能被封裝,可以說(shuō)Facade無(wú)處不在;4. Abstract Factory——提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類,咋一看,太抽象了,說(shuō)個(gè)例子,在三層架構(gòu)中,BLL層對(duì)DAL層的調(diào)用會(huì)直接用到DAL層中的類,如果DAL層是分別對(duì)SQL Server,Oracle的訪問(wèn),BLL層需要根據(jù)實(shí)際情況決定實(shí)例化哪一個(gè)DAL層中的類,我們又希望在兩種DAL層切換時(shí),BLL層和UI層都不做改變,那么可在BLL層和DAL層中增加接口層(體現(xiàn)了“抽象”的精神,或者說(shuō)是“面向接口編程”的最佳體現(xiàn))和抽象工廠(DALFactroy),讓它來(lái)實(shí)例化DAL層中的實(shí)例;5. Singleton——確保一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn),如單件窗體,點(diǎn)一下Menu,彈出一個(gè)窗體(實(shí)例),在關(guān)閉這個(gè)新窗體之前,再次點(diǎn)擊該Menu,不會(huì)再次出現(xiàn)同樣的彈出窗體(實(shí)例)。。。篇幅有限,其他模式或多或少都有點(diǎn)感覺(jué)。

最后,引用《設(shè)計(jì)模式解析》書中的一句話:設(shè)計(jì)模式體現(xiàn)的是一種思想,而思想是指導(dǎo)行為的一切,理解和掌握了設(shè)計(jì)模式,并不是說(shuō)記住了23種(或更多)設(shè)計(jì)場(chǎng)景和解決策略(實(shí)際上這也是很重要的一筆財(cái)富),實(shí)際接受的是一種思想的熏陶和洗禮,等這種思想融入到了你的思想中后,你就會(huì)不自覺(jué)地使用這種思想去進(jìn)行你的設(shè)計(jì)和開(kāi)發(fā),這一切才是最重要的。

【設(shè)計(jì)模式心得體會(huì)】相關(guān)文章:

設(shè)計(jì)模式心得體會(huì)(通用17篇)05-25

關(guān)于教學(xué)設(shè)計(jì)模式的探討04-30

軟件體系結(jié)構(gòu)與設(shè)計(jì)模式課程教學(xué)模式的探討04-28

淺析設(shè)計(jì)素描課程的訓(xùn)練模式04-28

MVC設(shè)計(jì)模式在ASPNET中的實(shí)現(xiàn)05-02

淺議音樂(lè)教學(xué)模式的設(shè)計(jì)與實(shí)踐04-28

氣體制備設(shè)計(jì)模式論文05-04

故障模式下的空間交會(huì)防撞設(shè)計(jì)04-27

向數(shù)字化設(shè)計(jì)模式轉(zhuǎn)變04-28

設(shè)計(jì)失效模式及后果分析 DFMEA -案例04-30