C#設計模式亂談(一)

C#設計模式亂談(一)

 

其實很早以前就想仔細看看《設計模式:可複用面向對象軟件的基礎》這本書,於是到網上下了一本PDF版的,這絕對是一本好書,它的首要原因是太多人提到這本書,其次是我看了幾天,還是毫無收穫,就象一個人初入武當,師傅也不管他,直接丟了一本《武當心法》給你,然後讓你自已去體會,我想他一定會不知所云。我想我也是這樣子,應該是我功力太淺,所學甚少的緣故吧,於是最終不了了之了。總算2005年10月份開始李建忠老師開始在MSDN的WebCasts開講設計模式,對於這位老師我是非常敬仰的,正好他此次講的是如何在C#中使用設計模式,基本上每個月是兩次直播,一共是24節課,整整講了12個月,到了2006年11月纔講完(視頻下載地址如下:http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/downloadarchive.aspx)。我是沒有耐心跟着看的,於是到了12月份才一氣全部下載下來,慢慢的看。總算開始對設計模式有了一些體會。

現在就來談談我對採用設計模式來設計軟件的一些體會吧。設計模式就象武術中的招式,它每種設計模式就是針對一種情況的解決方案。當然,首先是軟件需求發生了變化,因此才需要進行軟件重構,如果軟件需求沒有發生變化,那麼原有的設計就是很好的,不要因爲模式而模式。GoF提出了23種設計模式,但是你可以在熟悉這些設計模式的基礎上,本着設計模式的設計原則來擴展設計模式。那設計模式有哪些基本原則呢?

設計模式的原則可以歸納成以下三條

1)針對接口編程,而不是針對實現編程。接口相對固定,具體實現則變化頻度大,因此爲了保證軟件的鬆耦合,可以根據具體的需求來實現接口編程。

2)優先使用對象組合,而不是類繼承。這一條好象跟我們以前初學編程時的觀念有所衝突。實際上設計模式是要把其它類當作一個黑盒來使用,只需要知道它的功能,而不需知道它的實現。而類繼承在某種意義上是一種白盒使用,它很多地方是需要知道基類的實現的。比如protect所定義的東東。

3)封裝變化,誰變化,封裝誰。這句話好理解,但是要避免一開始就想套用什麼設計模式,應該封裝誰,應該是變化來了後,再根據變化點來進行封裝。

設計模式提出了很多年了,但是應該說應用的軟件還不是很多,很多人包括我在寫程序時即算是用C#這樣的面向對象的語言寫出來的東東還是面向過程的思維方式,並沒有考慮太多的設計。軟件界提出很多設計模式的具體原則,如單一職責原則(SRP)、開放封閉原則(OCP)、替換原則(LSP)、依賴倒置原則(DIP)、接口隔離原則(ISP),我倒是認爲其實這些都不是主要的東東,並不一定要完全按以上原則來實現設計模式。不過開放封閉原則我還是相當認同,它的意思是開放擴展,封閉修改。也就是一個DLL寫好後,你只要通過擴展一個DLL,而不用打開原來的DLL的代碼去修改再編譯就可以實現你的新功能。這樣的確不錯。

最後談一談設計模式的分類。設計模式按功能可以分成三大類

一、    創建型:負責解決對象的創建變化的問題

二、    結構型:負責解決類與對象之間關係的問題

三、    行爲型:負責解決類與對象職責分配問題

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章