.NET中的设计模式---由吃龙虾想到的
作者: 倪大蝦 發(fā)表于 2010-07-18 18:10 原文鏈接 閱讀: 725 評(píng)論: 20
今天吃小龍蝦的時(shí)候忽然想到了以前一個(gè)湖北朋友講的蝦的故事.這位朋友是湖北人,據(jù)他說(shuō)在他小時(shí)候他們那里很多蝦,特別是夏天雨后,滿(mǎn)地爬的都是.因?yàn)閭髡f(shuō)那是美國(guó)對(duì)付中國(guó)的秘密武器,居然沒(méi)有人敢吃.后來(lái)偶然有人提了半桶換賣(mài)了5塊錢(qián)回來(lái),慢慢的大家認(rèn)識(shí)到蝦的價(jià)值,隨后就有了今天吃得五香小龍蝦.然而近幾年出現(xiàn)的"洗蝦粉"又讓人心有余悸.回想起昨天看到亞力山大<召集討論設(shè)計(jì)模式是語(yǔ)言表達(dá)能力低下的產(chǎn)物>一貼.突然發(fā)現(xiàn)設(shè)計(jì)模式和蝦居然有相似的命運(yùn).
?
設(shè)計(jì)模式從出現(xiàn)到發(fā)展,到普及再到今天,人們對(duì)它的認(rèn)識(shí)也同樣經(jīng)過(guò)了"陌生"->"認(rèn)識(shí)使用"->"批評(píng)".設(shè)計(jì)模式在程序員心目的地位中也經(jīng)歷了"新奇"->"圣經(jīng)"->"懷疑".然而,不管人們?nèi)绾握J(rèn)識(shí)龍蝦,從始至終蝦還是蝦,沒(méi)有變過(guò).同樣,設(shè)計(jì)模式自出現(xiàn)現(xiàn)到今天,一樣沒(méi)有變,變得只是次第更新的軟件設(shè)計(jì)開(kāi)發(fā)技術(shù),變得只是一代又一代的程序員.
?
設(shè)計(jì)模式是20世紀(jì)60-70年代的軟件危機(jī)之后大規(guī)模軟件的發(fā)展的結(jié)果.這里有個(gè)問(wèn)題,什么是設(shè)計(jì)模式.相比能夠真正回答正確的人不多,真正理解的人也不多,因此經(jīng)歷的輝煌之后隨之而來(lái)的懷疑就不可避免了,不過(guò)也正是這些批判懷疑促進(jìn)了設(shè)計(jì)模式更進(jìn)一的發(fā)展.
?
什么是設(shè)計(jì)模式,我也無(wú)法給出權(quán)威的答案,不過(guò)我敢肯定,設(shè)計(jì)模式不是<gof23種設(shè)計(jì)模式>中的UML圖,也不是一行行的示例代碼,它有的只是一種思想,一種思考問(wèn)題的方式,就像<加勒比海盜>中的<海盜法典>,它只是指導(dǎo),而并非律法.
?
既然只是一種指導(dǎo),那么在使用的時(shí)候就應(yīng)當(dāng)根據(jù)實(shí)際情況使用它或不使用它,用一種方法實(shí)現(xiàn)它或用另外一種方法實(shí)現(xiàn)它.指導(dǎo)告訴我們一個(gè)解決問(wèn)題的方向,而例子告訴我們到達(dá)目的地眾多路徑中的一條,它可能是最優(yōu),也可能是最差.<gof23種設(shè)計(jì)模式>一書(shū)不僅詳細(xì)的表達(dá)了什么是設(shè)計(jì)模式,而且有很多生動(dòng)的例子.這些例子用來(lái)具體說(shuō)明每種設(shè)計(jì)模式.然而在今天看來(lái),那些Smalltalk或C++的例子卻成了一幅無(wú)形的枷鎖,讓很多人去套用而不知道因地制宜的發(fā)散擴(kuò)展.比如當(dāng)不斷的用if ...else if選擇工廠或策略的時(shí)候,就不會(huì)想到在.NET中可以使用反射來(lái)去掉讓人生厭的if...else.
?
今天討論的是.NET中的設(shè)計(jì)模式.大家都知道設(shè)計(jì)模式出現(xiàn)時(shí)還沒(méi)有.NET,Gof不可能預(yù)見(jiàn)會(huì)有C#的出現(xiàn),寫(xiě)論文的時(shí)候也不可能知道有反射,委托,事件等技術(shù)的出現(xiàn).因而亞歷山大同志單憑"比如C#內(nèi)置了事件機(jī)制,那么Observer還有意思"就認(rèn)為設(shè)計(jì)模式已過(guò)時(shí)就顯得過(guò)于武斷了.
????? .NET中有很多特性使得設(shè)計(jì)模式的實(shí)現(xiàn)更加簡(jiǎn)單,然而并不是說(shuō)一定要用這些特性來(lái)實(shí)現(xiàn)設(shè)計(jì)模式,,就好比有了乘法,有時(shí)候我們用加法實(shí)現(xiàn)1+1=2可能更好,你不能因此而否定了乘法.同樣,既然"事件"能夠?qū)崿F(xiàn)"Observer"的效果,那么一個(gè)事件不正是一個(gè)Observer嗎?Observer不是加入到.NET中了嗎!它只不過(guò)換了個(gè)名字,本質(zhì)沒(méi)有變.
?
所以說(shuō)我們?cè)谟迷O(shè)計(jì)模式的時(shí)候首先應(yīng)該深入挖掘語(yǔ)言的潛力,而后結(jié)合設(shè)計(jì)模式的思想,創(chuàng)造獨(dú)有的應(yīng)用設(shè)計(jì)模式.或許在C++中實(shí)現(xiàn)一個(gè)Observer有很多行代碼,在.NET中一行即可.書(shū)中的例子只是學(xué)習(xí)的一種途徑,沒(méi)有創(chuàng)新,生搬硬套只能是鸚鵡學(xué)舌,邯鄲學(xué)步,最終也只是貽笑大方了.
評(píng)論: 20 查看評(píng)論 發(fā)表評(píng)論
百度期待您的加盟
最新新聞:
· 微軟不為外界所知的十件趣事(2010-07-18 22:58)
· 中國(guó)第2季搜索引擎市場(chǎng)規(guī)模達(dá)26億 百度破70%(2010-07-18 22:54)
· Facebook用戶(hù)數(shù)下周達(dá)5億 邀請(qǐng)用戶(hù)共享故事(2010-07-18 22:49)
· 開(kāi)源的可視化編輯器 KindEditor 3.5.1 發(fā)布(2010-07-18 22:35)
· WordPress 陷入開(kāi)源‘邊界’之爭(zhēng)(2010-07-18 17:47)
編輯推薦:揭秘Facebook背后的那些軟件
網(wǎng)站導(dǎo)航:博客園首頁(yè)??個(gè)人主頁(yè)??新聞??閃存??小組??博問(wèn)??社區(qū)??知識(shí)庫(kù)
總結(jié)
以上是生活随笔為你收集整理的.NET中的设计模式---由吃龙虾想到的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: export function函数传参_
- 下一篇: asp.net ajax控件工具集 Au