- 相關(guān)推薦
初讀設(shè)計(jì)模式-《design pattern explained》讀后感
從網(wǎng)上淘來(lái)了一本《design pattern explained》,用了半個(gè)月的時(shí)間細(xì)細(xì)的讀完了這本書。本打算單單的從技術(shù)角度進(jìn)行總結(jié)的,但是卻全然沒(méi)有頭緒。說(shuō)說(shuō)自己的粗淺的感悟吧。書里沒(méi)有把23中設(shè)計(jì)模式全部羅列出來(lái),擺上類圖和源代碼,恩,這樣的做法在作者看來(lái)很傻。作者說(shuō),將目標(biāo)集中在設(shè)計(jì)模式解決問(wèn)題本身上"only tells us what to do but not when to use and why to do it"是的,我們需要的應(yīng)該是思考的過(guò)程和方法,而不是前人留給我們的思考結(jié)果。從這個(gè)角度講,設(shè)計(jì)模式里我們應(yīng)該學(xué)到什么?設(shè)計(jì)模式是一組偉大的思想結(jié)晶。我們的出發(fā)點(diǎn)是應(yīng)對(duì)可能出現(xiàn)和已經(jīng)出現(xiàn)的需求,并且降低未來(lái)的維護(hù)難度。我們使用的技術(shù)手段是面向?qū)ο。所以,我們要學(xué)習(xí):究竟什么是面向?qū)ο?為什么要面向?qū)ο?怎么面向?qū)ο?
面向?qū)ο蟛皇欠庋b繼承多態(tài)。面向?qū)ο笾父嬖V甚至我們,封裝繼承多態(tài)不是他最big idea--message passing才是!但是message passing也僅僅是看到了表面而已,message passing體現(xiàn)了一個(gè)很重要的觀點(diǎn)--an object should responsible for themselves!而且這只是管中窺豹,我們還可以看到更多的東西。為什么要面向?qū)ο?面向?qū)ο笫刮覀兊拇a易于書寫和維護(hù)。不要以為using namespace或者encapsulation就是易于書寫和維護(hù),真正的易于書寫是指,當(dāng)我們編碼時(shí)思考的難度降低了,當(dāng)需求發(fā)生變化的時(shí)候我們所做的更改減少了。怎么面向?qū)ο?書中說(shuō)要從三個(gè)角度考慮:conceptual level、specification level和implementation level從面向過(guò)程到面向?qū)ο笫挛锏陌l(fā)展難以擺脫否定之否定原理,程序設(shè)計(jì)也是如此。面向過(guò)程是很自然而然產(chǎn)生的一種設(shè)計(jì)思路,因?yàn)樗狭擞?jì)算機(jī)處理問(wèn)題的方式。但他有他固有的缺點(diǎn),其實(shí)可以把面向過(guò)程看成是高度耦合,松散內(nèi)聚的面向?qū)ο蟮脑O(shè)計(jì)方式。任何兩個(gè)對(duì)象,或者說(shuō)模塊間都可以互相訪問(wèn)對(duì)方的成員,模塊間分工并不明確,分工的依據(jù)是任務(wù)的完成順序。這樣一來(lái)我們處理問(wèn)題會(huì)很頭疼,我們不得不小心翼翼的控制模塊不要錯(cuò)誤的訪問(wèn)數(shù)據(jù)。而某個(gè)模塊任務(wù)的完成可能會(huì)用到很多其他的模塊,當(dāng)某個(gè)模塊改動(dòng)的時(shí)候,并不知道這會(huì)給其他的模塊帶來(lái)怎么樣的負(fù)面影響,就像作者說(shuō)的"Like asnowball that picks up snow as it rolls downhill,a focus on functions leads to acascade of changes from which it is difficult to escape."那高內(nèi)聚,低耦合的面向?qū)ο笥钟惺裁春锰幠?面向?qū)ο罄锖苤匾囊粋(gè)特性是封裝,這個(gè)封裝不止是對(duì)數(shù)據(jù)的封裝,還包括對(duì)行為,對(duì)概念,對(duì)實(shí)現(xiàn)細(xì)節(jié)等等的封裝,盡可能的叫對(duì)象去負(fù)責(zé)屬于他的責(zé)任,而外部不需要關(guān)心的細(xì)節(jié)則一概隱藏起來(lái),這似乎更加符合人的思路。這本書里不停的提到《the timeless way of building》,就像建筑一樣,房子是用來(lái)住的,作為用戶我們并不需要知道怎么去蓋這所房子,不需要知道房子的骨架--我們只負(fù)責(zé)住,房子只負(fù)責(zé)保護(hù)我們。傳統(tǒng)面向?qū)ο笈c新觀點(diǎn)下的面向?qū)ο髸胁煌5闹貜?fù)三個(gè)觀點(diǎn)(源自四人幫):Design to interfaces.封裝細(xì)節(jié),使使用者和被使用者都能更好的responsible for themselvesFavor composition over inheritance.防止類爆炸,提高內(nèi)聚。Find what varies and encapsulate it.封裝變化,應(yīng)對(duì)可能的需求變更。書中余下的篇幅都是在介紹幾種設(shè)計(jì)模式,里面詳細(xì)應(yīng)用到了這幾個(gè)觀點(diǎn)。設(shè)計(jì)模式這一部分我不敢太多的贅述,我還沒(méi)能將這些模式應(yīng)用到實(shí)踐中來(lái)。稍作粗淺的總結(jié)吧?赡苡泻芏噱e(cuò)誤的理解,希望諸位看官能幫我糾正~the facde pattern:封裝復(fù)雜的接口或者不需要被外部了解的細(xì)節(jié),對(duì)外提供一個(gè)簡(jiǎn)單的接口。the adaptar pattern:封裝不同的類,使他們具有相同的對(duì)外的接口,方便使用。the bridge pattern:概念和實(shí)現(xiàn)分離,說(shuō)實(shí)話,這個(gè)我真沒(méi)理解,求解釋。the abstract factory pattern:由控制器負(fù)責(zé)對(duì)象類型的選擇,工廠負(fù)責(zé)生產(chǎn)相應(yīng)的對(duì)象。隱藏對(duì)象合成的細(xì)節(jié)。the strategy pattern:這個(gè)模式很好的實(shí)現(xiàn)了兩個(gè)原則"合成復(fù)用"和"封裝變化"。將可能出現(xiàn)的變化封裝起來(lái),在原對(duì)象中組合該封裝該變化的對(duì)象,靠一個(gè)config對(duì)象來(lái)控制策略的選擇。the decorator pattern:這個(gè)模式的本質(zhì)是裝飾類的功能,在實(shí)現(xiàn)原有類的基礎(chǔ)上實(shí)現(xiàn)新的功能?木有理解,求解釋。the singleton pattern:無(wú)須多言,保證只存在一個(gè)實(shí)例。the observer pattern:說(shuō)白了就是一群對(duì)象盯著消息隊(duì)列,監(jiān)聽到自己能處理的消息就做出相應(yīng)的行動(dòng)。the template method pattern:木有理解。the factory pattern:工廠是抽象的,只定義了子類需要實(shí)現(xiàn)什么功能,具體怎么實(shí)現(xiàn),由子類決定。
【初讀設(shè)計(jì)模式-《design pattern exp】相關(guān)文章:
初下雪的說(shuō)說(shuō)02-26
初計(jì)劃作文02-21
初憶的作文10-07
關(guān)于初的作文03-15
戰(zhàn)勝拖拉:等死模式與穿越模式 -管理資料04-07
什么是場(chǎng)景模式03-23
開學(xué)初情況總結(jié)01-06
初升的太陽(yáng)作文06-07