设计模式之禅读书笔记
》設(shè)計原則《
》Single Responsibility Principle(單一職責(zé)原則)類只有一個修改的原因。
? ●類的復(fù)雜性降低,實現(xiàn)什么職責(zé)都有明確的定義。
? ●可讀性高
? ●可維護(hù)性高
? ●變更引起的風(fēng)險降低。
PS:基本不可能實現(xiàn)
》里氏替換原則:只要父類可以出現(xiàn)的地方,子類就可以出現(xiàn)。
》Dependence ?Inversion Principle(依賴倒置原則)
? ●高層次模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴抽象。
? ●抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象
》接口隔離原則:類之間的依賴關(guān)系應(yīng)該建立在最小的接口上。
》迪米特法則:一個對象應(yīng)該對其他對象有最少的理解。
》開閉原則:對擴(kuò)展開放,對修改關(guān)閉。
? ●邏輯變化
? ●子模塊變化
? ●可見視圖變化
設(shè)計模式
》單例模式(Singleton Pattern):要求一個類只能生成一個對象,所有對象對他的依賴都是相同的。
類圖:
優(yōu)點:
? ●較少了內(nèi)存開支,性能開銷。避免對資源的多重占用。
? ●優(yōu)化和共享資源訪問。
缺點:
? ●擴(kuò)展困難。對測試不利。
使用場景:
? ● 生成唯一序列號的環(huán)境。
? ●需要一個共享的訪問點或共享數(shù)據(jù)。如web上的計數(shù)器。
? ●創(chuàng)建對象需要耗費的資源過多。如訪問IO資源。
注意事項:
? ●線程同步的問題。
最佳實現(xiàn):
? ● 在Spring中,每個Bean默認(rèn)都是單例的。
》工廠方法模式:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個對象。
類圖:
優(yōu)點:
? ●良好的封裝。代碼結(jié)構(gòu)清晰。
? ●擴(kuò)展非常優(yōu)秀。
? ●屏蔽產(chǎn)品類。
擴(kuò)展:
? ● 縮小為簡單工廠。
? ●升級為多個工廠類。
? ●替代單例模式
? ●延遲初始化。
》抽象工廠模式:為創(chuàng)建一組相關(guān)或依賴的對象提供一個接口,卻無需指定它們的具體類。
類圖:
優(yōu)點:
? ●封裝性,工廠類創(chuàng)建需要的對象。
? ●產(chǎn)品族的約束為非公開的狀態(tài)。
缺點:
? ●?產(chǎn)品族擴(kuò)展非常困難。
》模板方法模式:定義一個操作中算法的框架,而將一些步驟延遲到子類,使得子類可以在不改變一個算法的結(jié)構(gòu)即可重新定義該算法的某些特定步驟。
類圖:
? ●注:在軟件開發(fā)的過程中,如果相同的代碼拷貝過兩次,就要對設(shè)計產(chǎn)生懷疑。
? ●為了防止惡意的操作,一般模板方法都加上final關(guān)鍵字,不如許復(fù)寫。
優(yōu)點:
? ●封裝不變的部分,擴(kuò)展可變的部分。
? ●提取公共代碼,便于維護(hù)。
? ●?行為由父類控制,子類實現(xiàn)。
缺點:
? ●子類對父類產(chǎn)生了影響,會帶來代碼的閱讀難度。
使用場景:
? ●可以把核心算法設(shè)計為模板方法。
? ●重構(gòu)時,把相同的代碼抽取到父類。
擴(kuò)展:
? ●增加鉤子方法,也就是說外界條件改變,影響到模板方法的執(zhí)行。
》建造者模式:將一個復(fù)雜對象的構(gòu)建與他的表示分離。是得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
? ●?ArrayList和HashMap如果定義成類的成員變量,那你的方法中的調(diào)用一定要做一個clear的動作。以防數(shù)據(jù)混亂。
類圖:
? ●product產(chǎn)品類:通常是實現(xiàn)了模板方法模式。
? ●Builder抽象構(gòu)建者:規(guī)范產(chǎn)品的組件。一般由子類實現(xiàn)。
? ●ConcreteBuilder:實現(xiàn)抽象類所定義的方法,并返回一個組建好的對象。
? ●Director導(dǎo)演:負(fù)責(zé)安排已有的順序。起到封裝的作用。
優(yōu)點:
? ●可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。
? ●建造者獨立,容易擴(kuò)展。
? ●?便于控制細(xì)節(jié)。
使用場景:
? ●相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的結(jié)果。
? ●多個部件,都可以裝配到一個對象中,但是產(chǎn)生的運行結(jié)果有不同。
? ●產(chǎn)品類非常復(fù)雜,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能。
》代理模式:為其他對象提供一個代理以控制這個對象的訪問。
類圖:
? ●subject主題角色:普通的業(yè)務(wù)類型定義。
? ● Realsubject:業(yè)務(wù)邏輯的具體執(zhí)行者。
? ●proxy:調(diào)用真實的類。
優(yōu)點:
? ● 職責(zé)清晰,真實的角色實現(xiàn)實際的業(yè)務(wù)邏輯。不必關(guān)心其他的事情。
? ● 高擴(kuò)展性:不管具體的主題如何變化,代理類都可以不用變。
注:String AOP是一個典型的動態(tài)代理的應(yīng)用。
》》原型模式:用原型實例指定創(chuàng)建對象的種類。并且通過拷貝這些原型創(chuàng)建新的對象。
類圖:
優(yōu)點:
? ● ?性能優(yōu)良,原型模式是二進(jìn)制流的拷貝,要比直接new一個性能好的多。
? ● 逃避構(gòu)造函數(shù)的約束。
注:執(zhí)行拷貝的時候不會運行構(gòu)造函數(shù)。
? ● 淺拷貝:clone只拷貝本對象,其對象內(nèi)部的數(shù)組,引用對象不拷貝。
注:在使用原型模式的時候,引用的成員變量必須是成員變量與是一個可變的引用變量才不會被拷貝。
? ●深拷貝:把引用變量單獨拷貝。
注:深拷貝與淺拷貝不要混合使用。
? ? ? 對象的clone與對象的final關(guān)鍵字是沖突的。要是用clone方法,就不要使用final。
》》中介者模式:用一個中介對象封裝一系列對象的交互,中介者使各對象不需要顯示地相互作用。從而松耦合。也可以獨立的改變他們之間的交互。
類圖:
? ●優(yōu)點:減少類的依賴。降低了類之間的耦合度。
? ●缺點:中介者會膨脹的很大,邏輯復(fù)雜。
? ●MVC:C就是一個中介者。
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
? ●
?
?未完待續(xù)。。。。。。
?
轉(zhuǎn)載于:https://www.cnblogs.com/skys-li/p/5363771.html
總結(jié)
以上是生活随笔為你收集整理的设计模式之禅读书笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公司消费一卡通“变法”记
- 下一篇: Pro Android学习笔记(三三):