.NET中的設計模式---由喫龍蝦想到的


作者: 倪大蝦 發表於 2010-07-18 18:10 原文鏈接 閱讀: 725 評論: 20

  今天喫小龍蝦的時候忽然想到了以前一個湖北朋友講的蝦的故事.這位朋友是湖北人,據他說在他小時候他們那裏很多蝦,特別是夏天雨後,滿地爬的都是.因爲傳說那是美國對付中國的祕密武器,居然沒有人敢喫.後來偶然有人提了半桶換賣了5塊錢回來,慢慢的大家認識到蝦的價值,隨後就有了今天喫得五香小龍蝦.然而近幾年出現的"洗蝦粉"又讓人心有餘悸.回想起昨天看到亞力山大<召集討論設計模式是語言表達能力低下的產物>一貼.突然發現設計模式居然有相似的命運.

 

  設計模式從出現到發展,到普及再到今天,人們對它的認識也同樣經過了"陌生"->"認識使用"->"批評".設計模式在程序員心目的地位中也經歷了"新奇"->"聖經"->"懷疑".然而,不管人們如何認識龍蝦,從始至終蝦還是蝦,沒有變過.同樣,設計模式自出現現到今天,一樣沒有變,變得只是次第更新的軟件設計開發技術,變得只是一代又一代的程序員.

 

  設計模式是20世紀60-70年代的軟件危機之後大規模軟件的發展的結果.這裏有個問題,什麼是設計模式.相比能夠真正回答正確的人不多,真正理解的人也不多,因此經歷的輝煌之後隨之而來的懷疑就不可避免了,不過也正是這些批判懷疑促進了設計模式更進一的發展.

 

  什麼是設計模式,我也無法給出權威的答案,不過我敢肯定,設計模式不是<gof23種設計模式>中的UML圖,也不是一行行的示例代碼,它有的只是一種思想,一種思考問題的方式,就像<加勒比海盜>中的<海盜法典>,它只是指導,而並非律法.

 

  既然只是一種指導,那麼在使用的時候就應當根據實際情況使用它或不使用它,用一種方法實現它或用另外一種方法實現它.指導告訴我們一個解決問題的方向,而例子告訴我們到達目的地衆多路徑中的一條,它可能是最優,也可能是最差.<gof23種設計模式>一書不僅詳細的表達了什麼是設計模式,而且有很多生動的例子.這些例子用來具體說明每種設計模式.然而在今天看來,那些Smalltalk或C++的例子卻成了一幅無形的枷鎖,讓很多人去套用而不知道因地制宜的發散擴展.比如當不斷的用if ...else if選擇工廠或策略的時候,就不會想到在.NET中可以使用反射來去掉讓人生厭的if...else.

 

  今天討論的是.NET中的設計模式.大家都知道設計模式出現時還沒有.NET,Gof不可能預見會有C#的出現,寫論文的時候也不可能知道有反射,委託,事件等技術的出現.因而亞歷山大同志單憑"比如C#內置了事件機制,那麼Observer還有意思"認爲設計模式已過時就顯得過於武斷了.

  

      .NET中有很多特性使得設計模式的實現更加簡單,然而並不是說一定要用這些特性來實現設計模式,,就好比有了乘法,有時候我們用加法實現1+1=2可能更好,你不能因此而否定了乘法.同樣,既然"事件"能夠實現"Observer"的效果,那麼一個事件不正是一個Observer嗎?Observer不是加入到.NET中了嗎!它只不過換了個名字,本質沒有變.

 

  所以說我們在用設計模式的時候首先應該深入挖掘語言的潛力,而後結合設計模式的思想,創造獨有的應用設計模式.或許在C++中實現一個Observer有很多行代碼,在.NET中一行即可.書中的例子只是學習的一種途徑,沒有創新,生搬硬套只能是鸚鵡學舌,邯鄲學步,最終也只是貽笑大方了.

評論: 20 查看評論 發表評論

百度期待您的加盟


最新新聞:
· 微軟不爲外界所知的十件趣事(2010-07-18 22:58)
· 中國第2季搜索引擎市場規模達26億 百度破70%(2010-07-18 22:54)
· Facebook用戶數下週達5億 邀請用戶共享故事(2010-07-18 22:49)
· 開源的可視化編輯器 KindEditor 3.5.1 發佈(2010-07-18 22:35)
· WordPress 陷入開源‘邊界’之爭(2010-07-18 17:47)

編輯推薦:揭祕Facebook背後的那些軟件

網站導航:博客園首頁  個人主頁  新聞  閃存  小組  博問  社區  知識庫

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