] 必須知道的設(shè)計模式本文將介紹以下內(nèi)容: • 設(shè)計模式(Design & Pattern)
本文涉及以下技術(shù): 面向?qū)ο?、設(shè)計模式
引言 設(shè)計模式是面向?qū)ο笏枷氲募蟪?,GOF在其經(jīng)典著作中總結(jié)了23種設(shè)計模式,又可分為:創(chuàng)建型、結(jié)構(gòu)型和行為型3個大類。對于軟件設(shè)計者來說,一般的過 程就是在熟練掌握語言背景的基礎(chǔ)上,了解類庫的大致框架和常用的函數(shù)和接口等,然后多再在百般錘煉中,提高對軟件設(shè)計思想的認識。 軟件設(shè)計者要清楚自己的定位和方向,一味的沉溺于技術(shù)細節(jié)的思路是制約個人技術(shù)走向成熟的毒藥。因此,學習軟件設(shè)計,了解軟件工程,是每個開發(fā)人員必備的 一課。筆者在此不想詳細的描述各個設(shè)計模式的細節(jié),我想google和baidu上的資料已經(jīng)多如牛毛了。而且,爭取的學習方法也不是了解所有的設(shè)計模式 就可以無敵于天下。我所強調(diào)的學習方法就是在熟練掌握基本要素的基礎(chǔ)上,了解大致的框架。這一條不僅是學習類庫的方法,對設(shè)計模式來說是可行的。同時,切 記的是在平時的積累中,不斷的體會和實踐。因此,本文的目的就是將23種模式中,必須掌握的幾個最關(guān)鍵、最常用的設(shè)計模式,做以總結(jié)和簡述。 1 Factory Pattern 上榜理由:將程序中創(chuàng)建對象的操作,單獨出來處理,大大提高了系統(tǒng)擴展的柔性,接口的抽象化處理給相互依賴的對象創(chuàng)建提供了最好的抽象模式。 推薦熱貼: .NET設(shè)計模式(3):抽象工廠模式(Abstract Factory) 2 Facade Pattern 上榜理由:將表現(xiàn)層和邏輯層隔離,封裝底層的復(fù)雜處理,為用戶提供簡單的接口,這樣的例子隨處可見。門面模式很多時候更是一種系統(tǒng)架構(gòu)的設(shè)計,在我所做的項目中,就實現(xiàn)了門面模式的接口,為復(fù)雜系統(tǒng)的解耦提供了最好的解決方案。 推薦熱貼:設(shè)計模式學習筆記(十一)——Facade外觀模式 設(shè)計模式解析之——Facade模式(k_eckel轉(zhuǎn)自微軟高校博客K_eckel‘s mindview) 3 Command Pattern 上榜理由:將請求封裝為對象,從而將命令的執(zhí)行和責任分開。通常在隊列中等待命令,這和現(xiàn)實多么的相似呀。如果你喜歡發(fā)號施令,請考慮你的ICommond吧。 推薦熱貼:Command模式應(yīng)用實踐 .NET設(shè)計模式(17):命令模式(Command Pattern) 4 Strategy Pattern 上榜理由:策略模式,將易于變化的部分封裝為接口,通常Strategy 封裝一些運算法則,使之能互換。Bruce Zhang在他的博客中提到策略模式其實是一種“面向接口”的編程方法,真是恰如其分。 推薦熱貼:.Net中的設(shè)計模式——Strategy模式 設(shè)計模式(22)-Strategy Pattern 5 Iterator Pattern 上榜理由:相信任何的系統(tǒng)中,都會用到數(shù)組、集合、鏈表、隊列這樣的類型吧,那么你 就不得不關(guān)心迭代模式的來龍去脈。在遍歷算法中,迭代模式提供了遍歷的順序訪問容器,GOF給出的定義為:提供一種方法訪問一個容器 (container)對象中各個元素,而又不需暴露該對象的內(nèi)部細節(jié)。.NET中就是使用了迭代器來創(chuàng)建用于foreach的集合。 NET設(shè)計模式(18):迭代器模式(Iterator Pattern) 6 Adapter Pattern 上榜理由:在原類型不做任何改變的情況下,擴展了新的接口,靈活且多樣的適配一切舊 俗。這種打破舊框框,適配新格局的思想,是面向?qū)ο蟮木?。以繼承方式實現(xiàn)的類的Adapter模式和以聚合方式實現(xiàn)的對象的Adapter模式,各有千 秋,各取所長??磥?,把它叫做包裝器一點也不為過, 推薦熱貼:《讓僵冷的翅膀飛起來》系列之二——從實例談Adapter模式 C#設(shè)計模式(10)-Adapter Pattern .NET設(shè)計模式(8):適配器模式(Adapter Pattern) 7 Observer Pattern 上榜理由:定義對象間的一種一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時, 所有依賴于它的對象都得到通知并被自動更新。觀察者和被觀察者的分開,為模塊劃分提供了清晰的界限。在.NET中使用委托和事件可以更好的實現(xiàn)觀察者模 式,事件的注冊和撤銷不就對應(yīng)著觀察者對其對象的觀察嗎? 推薦熱貼:.NET實用設(shè)計模式:觀察者模式(Observer) .NET設(shè)計模式(19):觀察者模式(Observer Pattern) 8 Bridge Pattern 上榜理由:把實現(xiàn)和邏輯分開,對于我們深刻理解面向?qū)ο蟮木酆蠌?fù)用的思想甚有助益。 推薦熱貼:.NET設(shè)計模式(9):橋接模式(Bridge Pattern) 9 Singleton Pattern 上榜理由:改善全局變量和命名空間的沖突,可以說是一種改良了的全局變量。這種一個類只有一個實例,且提供一個訪問全局點的方式,更加靈活的保證了實例的創(chuàng)建和訪問約束。.NET Frameeork已經(jīng)封裝了Singleton類,我們拿來即可。 .NET設(shè)計模式(2):單件模式(Singleton Pattern)
總結(jié) 仁者見仁。以上只是筆者一家之言,更重要的真知灼見皆來源于實踐,設(shè)計思想和模式的應(yīng)用也來源于不斷的學習和反復(fù),我也將一如既往。此文只是開端,未來才是不斷的探索。 建議 1 不要拿著GOF的書,從頭看到尾,對我來說那是圣經(jīng)也是字典; 2 在軟件設(shè)計中體會設(shè)計模式,設(shè)計就是不斷的由需求生成的重構(gòu); 3 結(jié)合.NET Framework框架來學習設(shè)計模式在.NET中的應(yīng)用,對我們這樣的菜鳥來說是一舉兩得的事,即體味了設(shè)計,又深諳了框架; 4 把體會拿來共享。 致謝 感謝GOF: Erich Gamma、Richard Helm、Ralph Johnson 和John Vlissides,他們是經(jīng)典; 感謝Bruce Zhang、TerryLee、idior等的貢獻。他們是博客園的榜樣。 參考文獻 James W. Cooper,《C#設(shè)計模式》 劉藝,《Delphi設(shè)計模式》 GOF,《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》 |
|
來自: skywood > 《設(shè)計模式》