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