宅男程序員給老婆的計(jì)算機(jī)課程之5:設(shè)計(jì)模式
原創(chuàng)設(shè)計(jì)模式,應(yīng)該是很多ED心目中牛B的編程方式。
上回說(shuō)到ED的好書POEE,實(shí)際上便是一本專門講企業(yè)開發(fā)中使用的設(shè)計(jì)模式中的書。
設(shè)計(jì)模式,并不多,基本上看完GoF的這邊《Design Pattern》便可以有足夠了解了。
而實(shí)際開發(fā)中常用的設(shè)計(jì)模式更是屈指可數(shù),Singleton,F(xiàn)actory,F(xiàn)acade,Active Record、Provider等等。
就那么幾個(gè),花花功夫,仔細(xì)了解一下這幾個(gè),然后在實(shí)際編碼中應(yīng)用一下,便可以算是掌握了。
設(shè)計(jì)模式,并不難。
它是開發(fā)中非常必要的知識(shí),實(shí)際上,是非?;A(chǔ)的知識(shí),并不牛B。
開發(fā)的時(shí)候,需要時(shí)刻明確自己的目標(biāo):解決問(wèn)題。
解決問(wèn)題才是最重要的。
設(shè)計(jì)模式的存在,是為了更好的維護(hù)、管理代碼,或者是為了擴(kuò)展性;絕對(duì)不可以為了設(shè)計(jì)模式而模式。
在Java程序中,為了模式而模式的現(xiàn)象蠻普遍的。
我猜想這是因?yàn)镴ava是一門工業(yè)語(yǔ)言,有大量的ED使用的緣故。
ED把設(shè)計(jì)模式的使用,當(dāng)成是一種可以炫耀的編程技巧,或者說(shuō),他們遵從的編碼規(guī)范中,要求他們?nèi)ナ褂媚衬吃O(shè)計(jì)模式。
至于為什么要使用設(shè)計(jì)模式,最常見的理由便是:為了將來(lái)可以XX,或者YY。
程序開發(fā)中,有一句名言:“Pre-mature optimization is the root of all evil”。
過(guò)早優(yōu)化,是萬(wàn)惡之源。
非常多的情況下,將來(lái)預(yù)想中的XX或者YY;并不會(huì)發(fā)生。大部分代碼,寫了之后就會(huì)被丟棄掉,再也不會(huì)有人去維護(hù)。
當(dāng)XX或者YY發(fā)生的時(shí)候,往往,都是會(huì)推倒重來(lái)。
除非你很牛B,只有牛到一定程度,才有可能對(duì)將來(lái)可能發(fā)生的情況做好合理的預(yù)測(cè),并預(yù)留出改善、調(diào)整的空間。
但非常諷刺的是,為將來(lái)做設(shè)計(jì)的最好方法就是:什么都不做。
只有空白,才能夠留下最大的發(fā)揮空間。
現(xiàn)在為將來(lái)可能發(fā)生的情況,做了編碼,任何一行編碼,都是很可能是在為將來(lái)添加限制、制造麻煩。
現(xiàn)在寫下去的代碼,將來(lái),都是要被刪掉的;能夠不寫,就不寫。
在任何時(shí)候,都應(yīng)該保持代碼簡(jiǎn)潔。
函數(shù),盡可能的短;當(dāng)一個(gè)函數(shù)的長(zhǎng)度,超過(guò)一個(gè)屏幕的時(shí)候,便應(yīng)該考慮重構(gòu)、拆分。
牛B的程序,都應(yīng)該是簡(jiǎn)單、易懂的;采用大量的設(shè)計(jì)模式,復(fù)雜得讓人無(wú)法直接看懂,或許有它的意義以及應(yīng)用場(chǎng)景,但這絕對(duì)不是編程功力牛B的表現(xiàn)。
打個(gè)比方,設(shè)計(jì)模式就是武術(shù)招式。
學(xué)徒,必然需要熟悉什么“有風(fēng)來(lái)儀”或者“屁股朝后平沙落雁式”。
但更高的境界是:無(wú)招勝有招。
簡(jiǎn)單、直接的把代碼搞定。
Python大牛沈崴有云:“得道的程序員,既不封裝,也沒有重復(fù)代碼。”
http://eishn.blog.163.com/blog/static/6523182010102342531684/
作業(yè):
1. 使用一種編譯語(yǔ)言實(shí)現(xiàn) Singleton 模式
2. 使用一種動(dòng)態(tài)語(yǔ)言實(shí)現(xiàn) Singleton 模式
3. 說(shuō)說(shuō)對(duì) Provider 模式的理解。
男主角:Wuvist(新浪微博),真名翁偉,自稱胖程序員一個(gè),幸好已婚。學(xué)習(xí).NET
本文作者:Wuvist
女主角:Katze,Wuvist的老婆,女程序員,
51CTO系列: