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