如何學(xué)習(xí)和理解設(shè)計(jì)模式?
——對(duì)任何事物或原理的研究和學(xué)習(xí),一定要始終記住一個(gè)要點(diǎn):只有思維先進(jìn)入這一層,也就是在大腦里形成分析該問題的上下文環(huán)境,在這個(gè)基礎(chǔ)上,然后再用想關(guān)的思維方式考慮問題,才是清晰的,才是正確的。尤其是對(duì)深層原理和技術(shù),必須是這樣。
好的。回到設(shè)計(jì)模式的話題上,無疑的,設(shè)計(jì)模式應(yīng)該說是面向?qū)ο蟪绦蛟O(shè)計(jì)中較高層也較深入的研究方向了。我們先理解什么是模式和設(shè)計(jì)模式,這里,好像也并沒有一個(gè)統(tǒng)一說明該術(shù)語的解釋,但是我覺得《設(shè)計(jì)模式》一書中的這一句就可以了:
Christopher Alexander說過:“每一個(gè)模式描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復(fù)勞動(dòng)”[AIS+77,第10頁(yè)]。盡管Alexander所指的是城市和建筑模式,但他的思想也同樣適用于面向?qū)ο笤O(shè)計(jì)模式,只是在面向?qū)ο蟮慕鉀Q方案里,我們用對(duì)象和接口代替了墻壁和門窗。兩類模式的核心都在于提供了相關(guān)問題的解決方案。
這一句,首先從建筑的角度闡述了模式的概念,模式本身說明了我們周圍無數(shù)問題之間都充滿的共性,而將這引入面向?qū)ο蟪绦蛟O(shè)計(jì)領(lǐng)域,自然也充滿了相同的地方,發(fā)現(xiàn)這些方案的核心并提煉出其中的架構(gòu),就是我們通俗講的設(shè)計(jì)模式。
知其然,那又如何理解和學(xué)習(xí)其所以然呢?
要記住,設(shè)計(jì)模式是建立在面向?qū)ο蠡A(chǔ)上,用于解決類和對(duì)象的設(shè)計(jì)和之間相互通信的技術(shù)。所以當(dāng)學(xué)習(xí)和理解設(shè)計(jì)模式時(shí),首先我們面對(duì)和考慮的問題域應(yīng)該已經(jīng)是類和對(duì)象了,而不是對(duì)現(xiàn)實(shí)問題或世界的建模或者別的什么,不然我們很可能就會(huì)墜入永無天日的深淵!
而明白了這個(gè)關(guān)鍵的要素,下面的進(jìn)展就是水到渠成了。利用設(shè)計(jì)模式這些有效的方案和架構(gòu),幫助我們分解合適的對(duì)象,控制對(duì)象的粒度,指定對(duì)象的接口,最后到描述對(duì)象的實(shí)現(xiàn),多加研究和練習(xí),我們就能很好的運(yùn)用設(shè)計(jì)模式設(shè)計(jì)出架構(gòu)清晰,可復(fù)用性好的程序了。
總結(jié):本篇文章全是思想層面的講述,文字簡(jiǎn)短但是其中有的意思是很深刻的,可能需要在不斷的學(xué)習(xí)和實(shí)踐中加深理解。但是最關(guān)鍵的,也是突破最大障礙的銀彈是上文說過的一句話,此處再著重強(qiáng)調(diào):
對(duì)任何事物或原理的研究和學(xué)習(xí),一定要始終記住一個(gè)要點(diǎn):只有思維先進(jìn)入這一層,也就是在大腦里形成分析該問題的上下文環(huán)境,在這個(gè)基礎(chǔ)上,然后再用想關(guān)的思維方式考慮問題,才是清晰的,才是正確的。尤其是對(duì)深層原理和技術(shù),必須是這樣。