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