日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
王垠:解密“設(shè)計(jì)模式”

有些人問(wèn)我,你說(shuō)學(xué)習(xí)操作系統(tǒng)的***辦法是學(xué)習(xí)程序設(shè)計(jì)。那我們是不是應(yīng)該學(xué)習(xí)一些“設(shè)計(jì)模式”(design patterns)。這是一個(gè)我很早就有定論,而且經(jīng)過(guò)實(shí)踐檢驗(yàn)的問(wèn)題,所以想在這里做一個(gè)總結(jié)。

專業(yè)從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,高端網(wǎng)站制作設(shè)計(jì),微信小程序開(kāi)發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠(chéng)服務(wù),采用H5開(kāi)發(fā)+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站,讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過(guò)程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。

總的來(lái)說(shuō),如果光從字面上講,程序里總是有一些“模式”可以發(fā)掘的。因?yàn)槟憧偸强梢越梃b以前的經(jīng)驗(yàn),來(lái)構(gòu)造新的程序。你可以把這種“經(jīng)驗(yàn)”叫做“模式”。可是自從《設(shè)計(jì)模式》(通常叫做 GoF,“Gang of Four”)這本書(shū)在 1994 年發(fā)表以來(lái),“設(shè)計(jì)模式”這個(gè)詞有了新的,扭曲的含義。它變成了一種教條,帶來(lái)了公司里程序的嚴(yán)重復(fù)雜化。

GoF 借鑒的是一個(gè)叫 Christopher Alexander 的建筑師的做法。Alexander 給一些建筑學(xué)里的“設(shè)計(jì)模式”起了名字,試圖讓建筑師們有一些“共同語(yǔ)言”。可惜的是,Alexander 后來(lái)自己都承認(rèn),他的實(shí)驗(yàn)失敗了。因?yàn)檫@些固定的模式,并沒(méi)有有效地傳遞精髓的知識(shí),沒(méi)有能讓新手設(shè)計(jì)出好的建筑。照搬模式東拼西湊,而不能看透事物的本質(zhì),其實(shí)是設(shè)計(jì)不出好東西的。

當(dāng)我聽(tīng)說(shuō)這本書(shū)的時(shí)候,我已經(jīng)學(xué)會(huì)了函數(shù)式編程,正在 Cornell 讀 PhD,專攻程序語(yǔ)言設(shè)計(jì)。有一天由于好奇這書(shū)為什么名氣這么大,我從圖書(shū)館借了一本回來(lái)看。我很快的發(fā)現(xiàn),其實(shí)這本書(shū)的作者只是給早已經(jīng)存在的編程方法起了一些新的名字而已。當(dāng)時(shí)我就拿起一張紙,把所有的 20 來(lái)個(gè)設(shè)計(jì)模式跟我常用的編程概念做了一個(gè)映射。這個(gè)映射居然是“多對(duì)一”(many-to-one)的。也就是說(shuō),多個(gè) GoF 設(shè)計(jì)模式,居然只對(duì)應(yīng)同一個(gè)我每天都用的概念。有些概念是如此的不值一提,以至于我根本不需要一個(gè)名字來(lái)描述它,更不要說(shuō)多個(gè)名字!

其中極少數(shù)值得一提的“模式”,也許是 visitor 和 interpreter。很可惜的是,只有很少的人明白如何使用它們。所謂的 visitor,其實(shí)本質(zhì)上就是函數(shù)式語(yǔ)言里的含有“模式匹配”(pattern matching)的遞歸函數(shù)。在函數(shù)式語(yǔ)言里,這是多么輕松的事情??墒且?yàn)?Java 沒(méi)有模式匹配,所以很多人使用 visitor pattern。為了所謂的“通用性”,他們往往把 visitor pattern 搞出多層繼承關(guān)系,讓你轉(zhuǎn)幾道彎也搞不清楚到底哪個(gè) visitor 才是干實(shí)事的。

其實(shí),函數(shù)式語(yǔ)言的研究者們?cè)缇椭?visitor pattern 是怎么得來(lái)的。如果你想知道如何從無(wú)到有,“發(fā)明”出 Java 的 visitor pattern,可以參考 Dan Friedman 跟他的學(xué)生 Matthias Felleisen 合寫(xiě)的的另一本“小人書(shū)”《A Little Java, A Few Patterns》(發(fā)表于 1997 年)。

而 interpreter (解釋器)模式呢?看了作者們寫(xiě)的例子程序之后,我發(fā)現(xiàn)他們其實(shí)并不會(huì)寫(xiě)解釋器,或者說(shuō)他們不知道如何寫(xiě)出優(yōu)雅的,正確的解釋器。如果你想知道如何寫(xiě)出好的解釋器,可以參考我的博文《怎樣寫(xiě)一個(gè)解釋器》。

你說(shuō)我在貶低這本書(shū)的真正價(jià)值,因?yàn)?GoF 說(shuō)了:“我們的貢獻(xiàn),就是給這些編程方式起名字。這樣讓廣大程序員有共同的語(yǔ)言?!?如果這也叫貢獻(xiàn)的話,我就可以寫(xiě)本書(shū),給“空氣”,“水”,“豬肉”這些東西全都起個(gè)新名字,讓大家有“共同的語(yǔ)言”。這不是搞笑嗎。

這不是我的一家之言,Peter Norvig 在 1998 年就做了一個(gè)演講,指出在“動(dòng)態(tài)語(yǔ)言”里面,GoF 的 20 幾個(gè)模式,其中絕大部分都“透明”了。也就是說(shuō),你根本感覺(jué)不到它們的存在。這就像我剛才告訴你的。

在這里 Norvig 的觀點(diǎn)是正確的,不過(guò)需要小心一個(gè)概念錯(cuò)誤。高級(jí)的“靜態(tài)語(yǔ)言”(能傳遞函數(shù)作為參數(shù)的),其實(shí)也可以避免大部分 GoF 設(shè)計(jì)模式。而“動(dòng)態(tài)語(yǔ)言”這個(gè)概念,在程序語(yǔ)言的理論里面,其實(shí)是沒(méi)有明確的定義的?!皠?dòng)態(tài)語(yǔ)言”其實(shí)也能進(jìn)行某些“靜態(tài)類型檢查”。不過(guò)在 1998 年,我還是個(gè)啥都不懂屁孩,所以這里就不跟 Norvig 大叔計(jì)較了。

既然老人們都有歷史局限性,那么為啥我還跟 GoF 找茬?本來(lái)這本書(shū)很老了,如果沒(méi)有人再被它誤導(dǎo)的話,這篇博文也就不必存在了??墒钱?dāng)我在 Google 實(shí)習(xí)的時(shí)候,我發(fā)現(xiàn)幾乎每個(gè)程序員的書(shū)架上都有一本 GoF!我在 Google 實(shí)習(xí)了兩次,***次的時(shí)候代碼全都是我一個(gè)人寫(xiě)的,所以沒(méi)有使用任何 GoF 設(shè)計(jì)模式。代碼直接,精巧而簡(jiǎn)單。當(dāng)我第二次回到 Google,發(fā)現(xiàn)我的代碼里已經(jīng)被加入了各種 factory,visitor,…… 其實(shí)啥好事也沒(méi)做,只不過(guò)讓我的代碼彎了幾道彎,讓人難以理解。

可見(jiàn)一本壞書(shū),毀掉的不只是一代程序員。鑒于如此,特發(fā)此文。各位新手,希望你們敲響警鐘,不要再走上這條老路,寫(xiě)出代碼來(lái)讓大家痛苦。

至于如何學(xué)會(huì)寫(xiě)真正好的代碼,我在另一篇博文里再講。


分享文章:王垠:解密“設(shè)計(jì)模式”
文章出自:http://m.5511xx.com/article/dhsijee.html