——探索設計模式系列之一
Terrylee,2005年12月06日
前言
加入Design & Pattern團隊有幾個(gè)月的時(shí)間了,慚愧的是從沒(méi)有寫(xiě)過(guò)關(guān)于設計模式的隨筆,得到wayfarer的同意,把企業(yè)庫系列的隨筆放在了團隊的首頁(yè)上。不是不想去寫(xiě)這樣的隨筆,也不是沒(méi)有時(shí)間,自己初學(xué)設計模式,去寫(xiě)設計模式的文章,有點(diǎn)班門(mén)弄斧的味道。園子里
設計模式
設計模式是規則嗎?
地上本沒(méi)有路,走得人多了也就成了路。設計模式如同此理,它是經(jīng)驗的傳承,并非體系;是被前人發(fā)現,經(jīng)過(guò)總結形成了一套某一類(lèi)問(wèn)題的一般性解決方案,而不是被設計出來(lái)的定性規則;它不像算法那樣可以照搬照用。
設計模式是架構嗎?
架構和模式應該是一個(gè)屬于相互涵蓋的過(guò)程,但是總體來(lái)說(shuō)架構更加關(guān)注的是所謂的High-Level Design,而模式關(guān)注的重點(diǎn)在于通過(guò)經(jīng)驗提取的“準則或指導方案”在設計中的應用,因此在不同層面考慮問(wèn)題的時(shí)候就形成了不同問(wèn)題域上的模式。模式的目標是,把共通問(wèn)題中的不變部分和變化部分分離出來(lái)。不變的部分,就構成了模式,因此,模式是一個(gè)經(jīng)驗提取的“準則”,并且在一次一次的實(shí)踐中得到驗證,在不同的層次有不同的模式,小到語(yǔ)言實(shí)現,大到架構。在不同的層面上,模式提供不同層面的指導。
設計模式,軟件的永恒之道?
這個(gè)問(wèn)題沒(méi)有答案,有的只是討論,看一下一位前輩結合建筑學(xué)得出的幾點(diǎn)心得吧:
和建筑結構一樣,軟件中亦有諸多的“內力”。和建筑設計一樣,軟件設計也應該努力疏解系統中的內力,使系統趨于穩定、有生氣。一切的軟件設計都應該由此出發(fā)。
任何系統都需要有變化,任何系統都會(huì )走向死亡。作為設計者,應該擁抱變化、利用變化,而不是逃避變化。
好的軟件只能“產(chǎn)生”而不能“創(chuàng )造”,我們所能做的只是用一個(gè)相對好的過(guò)程,盡量使軟件朝向好的方向發(fā)展。
需要設計模式嗎?
答案是肯定的,但你需要確定的是模式的應用是否過(guò)度?我得承認,世界上有很多天才的程序員,他可以在一段代碼中包含6 種設計模式,也可以不用模式而把設計做得很好。但我們的目標是追求有效的設計,而設計模式可以為這個(gè)目標提供某種參考模型、設計方法。
我們不需要奉GOF的設計模式為圭臬,但合理的運用設計模式,才是正確的抉擇。很多人看過(guò)GOF的《Design Patterns》,對這23 種模式也背得滾瓜爛熟。但重要的不是你熟記了多少個(gè)模式的名稱(chēng),關(guān)鍵還在于付諸實(shí)踐的運用。為了有效地設計,而去熟悉某種模式所花費的代價(jià)是值得的,因為很快你會(huì )在設計中發(fā)現這種模式真的很好,很多時(shí)候它令得你的設計更加簡(jiǎn)單了。
其實(shí)在軟件設計人員中,唾棄設計模式的可能很少,盲目夸大設計模式功用的反而更多。言必談“模式”,并不能使你成為優(yōu)秀的架構師。真正出色的設計師,懂得判斷運用模式的時(shí)機。還有一個(gè)問(wèn)題是,很多才踏入軟件設計領(lǐng)域的人員,往往對設計模式很困惑。對于他們來(lái)說(shuō),由于沒(méi)有項目的實(shí)際經(jīng)驗,OO 的思想也還未曾建立,設計模式未免過(guò)于高深了。其實(shí),即使是非常有經(jīng)驗的程序員,也不敢夸口對各種模式都能合理應用。[--摘自wayfare的設計之道]
后記
關(guān)于設計模式的理論性的文章,已經(jīng)寫(xiě)了很多了,我不想再繼續重復抄寫(xiě)下去,僅記錄下上面幾段話(huà),用它來(lái)作探索設計模式系列的一個(gè)開(kāi)篇吧。
聯(lián)系客服