學(xué)習(xí)設(shè)計(jì)模式,選定了三本書(shū):
1. 設(shè)計(jì)模式精解 [美]Alan Shalloway & James R. Trott著
很基礎(chǔ)的書(shū),沒(méi)有全面介紹23種模式,但是比較好懂,已經(jīng)看完了。
2.設(shè)計(jì)模式-可復(fù)用面向?qū)ο筌浖幕A(chǔ) GOF
公認(rèn)的設(shè)計(jì)模式經(jīng)典之作,不是很好懂,考驗(yàn)考驗(yàn)?zāi)托陌桑缧r(shí)候看了一半,就沒(méi)看了,感覺(jué)收獲很少,看完了第一本書(shū)后,現(xiàn)有撿起這本來(lái)從頭看起,應(yīng)該會(huì)有不少收獲。
3.設(shè)計(jì)模式精解-GOF23種設(shè)計(jì)模式解析 一牛人寫(xiě)的手稿
這個(gè)是某牛人深刻理解和實(shí)際應(yīng)用GOF那一幫理論后,寫(xiě)的一個(gè)手稿,感覺(jué)很不錯(cuò),已經(jīng)看完了,現(xiàn)又看準(zhǔn)備一遍。
這兒準(zhǔn)備記錄些書(shū)中比較經(jīng)典的文字,以及自己的些些理解。歡迎指正,共同探討。
1、懂了設(shè)計(jì)模式,你就懂了面向?qū)ο蠓治龊驮O(shè)計(jì)(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不遠(yuǎn)人,設(shè)計(jì)模式亦然如此。
【排第一的當(dāng)然是這一句了!道可道,非常道,順便查了下這句話(huà)的出處老子《道德經(jīng)》:“道可道也,非恒道也。名可名也,非恒名也。無(wú)名,萬(wàn)物之始也;有名,萬(wàn)物之母也。故恒無(wú)欲也,以觀其眇;恒有欲也,以觀其所徼。兩者同出,異名同謂。玄之又玄,眾眇之門(mén)。” 簡(jiǎn)單理解就是,“道”是可以意會(huì)的,但不可以言傳。哈哈,感覺(jué)設(shè)計(jì)模式也是這樣,往往只能由某個(gè)例子去通過(guò)“模式”的方法去解決某個(gè)問(wèn)題,來(lái)說(shuō)明模式的存在,在設(shè)計(jì)模式精解(第一本書(shū)里)最后幾章,感覺(jué)作者是在拿著問(wèn)題用一個(gè)一個(gè)的模式去套,違背了它的本意。正如下句所說(shuō):】
2、設(shè)計(jì)模式體現(xiàn)的是一種思想,而思想則是指導(dǎo)行為的一切,理解和掌握了設(shè)計(jì)模式,并不是說(shuō)記住了 23 種(或更多)設(shè)計(jì)場(chǎng)景和解決策略(實(shí)際上這也是很重要的一筆財(cái)富),實(shí)際接受的是一種思想的熏陶和洗禮,等這種思想融入到了你的思想中后,你就會(huì)不自覺(jué)地使用這種思想去進(jìn)行你的設(shè)計(jì)和開(kāi),這一切才是最重要的。
3、設(shè)計(jì)模式之于面向?qū)ο笙到y(tǒng)的設(shè)計(jì)和開(kāi)發(fā)的作用就有如數(shù)據(jù)結(jié)構(gòu)之于面向過(guò)程開(kāi)發(fā)的作用一般,其重要性和必要性自然不需要我贅述。
4、Scott Mayer 在其巨著《Effective C++》就曾經(jīng)說(shuō)過(guò):C++老手和C++新手的區(qū)別就是前者手背上有很多傷疤。是的在軟件開(kāi)發(fā)和設(shè)計(jì)的過(guò)程中,失敗、錯(cuò)誤是最好的老師,當(dāng)然在系統(tǒng)開(kāi)發(fā)中,失敗和錯(cuò)誤則是噩夢(mèng)的開(kāi)端和結(jié)束,因?yàn)槟愫茈y有改正錯(cuò)誤的機(jī)會(huì)。因此,盡量讓自己多幾道疤痕是對(duì)的。
5、面向?qū)ο笙到y(tǒng)的分析和設(shè)計(jì)實(shí)際上追求的就是兩點(diǎn),一是高內(nèi)聚(Cohesion),而是低耦合(Coupling)。這也是我們軟件設(shè)計(jì)所準(zhǔn)求的,因此無(wú)論是 OO 中的封裝、繼承、多態(tài),還是我們的設(shè)計(jì)模式的原則和實(shí)例都是在為了這兩個(gè)目標(biāo)努力著、貢獻(xiàn)著。
6、寫(xiě)這些文章,本身沒(méi)有任何功利的雜念,只是一個(gè)原生態(tài)的沖動(dòng),反而很輕松的完成了。有心栽花未必發(fā),無(wú)心之事可成功,世間的事情可能在很多的時(shí)候恰恰就是那樣了?!咀髡叩男膽B(tài)很令人欣賞....】
(1到6是擇自設(shè)計(jì)模式手稿(第三本書(shū)))
7、設(shè)計(jì)模式是針對(duì)特定場(chǎng)景下的特定問(wèn)題的可重復(fù)、可表達(dá)的解決方案。它不限于面向?qū)ο?。不限于設(shè)計(jì)階段,甚至不限于軟件開(kāi)發(fā)領(lǐng)域。
8、 從概念層次來(lái)看,一個(gè)對(duì)象是一系列的責(zé)任。 從規(guī)范層次來(lái)看,一個(gè)對(duì)象是一系列可以被其他對(duì)象或者該對(duì)象自己調(diào)用的方法。從實(shí)現(xiàn)層次來(lái)看,一個(gè)對(duì)象是一些代碼和數(shù)據(jù)。
9、一個(gè)分析的缺陷:過(guò)早對(duì)細(xì)節(jié)投入太多的關(guān)心。分析者可能共同存在一個(gè)問(wèn)題:在開(kāi)發(fā)過(guò)程中過(guò)早的投入了細(xì)節(jié)分析。這也很自然,因?yàn)榧?xì)節(jié)上的問(wèn)題總是很具體很容易的。細(xì)節(jié)上的解決方案通常很明顯,但這未必是一個(gè)最好的起點(diǎn)。應(yīng)該盡可能晚地投入細(xì)節(jié)中去。
10、 設(shè)計(jì)模式源于建筑學(xué)和人類(lèi)學(xué)?!狙由扉喿x著名建筑師Christopher Alexander的名著:The Timeless Way of Building,有中譯本,已經(jīng)看過(guò),譯本形如散文,很有意思?!?br>
11、最主要的一點(diǎn)就是封裝變化的概念,這是許多設(shè)計(jì)模式的主題。發(fā)現(xiàn)并封裝變化點(diǎn)。
12、換句話(huà)說(shuō),如果變化點(diǎn)是問(wèn)題領(lǐng)域中的特定的具體情況,共同點(diǎn)就定義了問(wèn)題領(lǐng)域中將具體情況捆綁在在一起的概念。共同的概念將由抽象類(lèi)來(lái)表現(xiàn)。而變化點(diǎn)分析發(fā)現(xiàn)的變化點(diǎn)將由具體類(lèi)(使用特定實(shí)現(xiàn)的派生自抽象類(lèi)的類(lèi))來(lái)實(shí)現(xiàn)。
13、在創(chuàng)建設(shè)計(jì)以處理變化的過(guò)程中,應(yīng)該遵循兩條基本策略:
·發(fā)現(xiàn)并封裝變化點(diǎn)。
·優(yōu)先使用對(duì)象組合,而不是類(lèi)繼承。
過(guò)去,開(kāi)發(fā)這常常依靠擴(kuò)展繼承來(lái)為這些變化點(diǎn)定位。但是,第二條策略告訴我們,應(yīng)該盡可能?chē)L試使用對(duì)象組合。其意圖是可以在獨(dú)立的類(lèi)中包含變化點(diǎn)從而使未來(lái)的變化不會(huì)影響現(xiàn)在的代碼。
6點(diǎn)了,要回了,下次接著寫(xiě)吧.......o(∩_∩)o...