學習設計模式 (四)(總結)

一.設計模式的三個分類

1.1模式的定義

模式:在某些場景下,針對某些問題的某些通用解決方案
場景:項目環境
問題:約束條件,項目目標等
解決方案:通用、可以複用的設計,解決約束,達到目標

1.2模式的分類

創建型模式:對象實例化的模式,創建型模式解耦了對象的實例化過程

結構型模式:把類或對象結合在一起形成更大的結構

行爲型模式:類和對象如何交互,及劃分責任和算法


1.3各模式的定義

創建型模式:

簡單工廠:一個工廠類根據傳入的參量決定創建出哪一種產品類的實例


工廠方法:定義一個創建對象的接口,讓子類決定實例化哪個類


抽象工廠:創建相關或依賴對象的家族,而無需明確指定具體類


單例模式:某個類只能有一個實例,提供一個全局訪問點


生成器模式:封裝一個複雜對象的構建過程,並可以按步驟構造


原型模式:通過複製現有的實例來創建新的實例


結構型模式:

適配器模式:將一個類的方法接口轉換成客戶希望的另個接口


組合模式:將對象組合成樹形結構以表示“部分-整體”的層次結構


裝飾者模式:動態地給對象添加新的功能


代理模式:爲其他對象提供一個代理以控制對這個對象的訪問


蠅量模式:通過共享技術有效地支持大量細粒度的對象


外觀模式:提供統一的方法來訪問子系統的一羣接口


橋接模式:將抽象部分與它的實現部分分離,使它們都可以獨立地變化


行爲型模式

模板模式:定義一個算法結構,而將一些步驟延遲到之類中實現


解釋器模式:給定一個語言,定義它的文法的一種表示,並定義一個解釋器


策略模式:定義一系列的算法,把它們封裝起來,並且使它們可相互替換


狀態模式:允許一個對象在其內部狀態改變時改變它的行爲


觀察者模式:對象間的一對多的依賴關係


備忘錄模式:在不破壞封裝性的前提下,保存對象的內部狀態


中介者模式:用一個對象來封裝一系列的對象交互


命令模式:將命令請求封裝爲一個對象,使的可用不同的請求來經行參數化


訪問者模式:在不改變數據結構的前提下,增加作用與一組對象元素新的功能


責任鏈模式:請求發送者和接收者之間解耦,使的多個對象都有機會處理這個請求


迭代器模式:一種遍歷訪問聚合對象中各個元素的方法,不暴露該對象的內部結構


二.對象設計的六大原則

1.組合複用原則

原則:多用組合,少用繼承
方法:找到變化部分,抽象,封裝變化
區分組合和複用:"has A"用組合,"is A"用繼承

2.依賴倒置原則

原則:依賴於抽象,不要依賴於具體;高層模塊不應該依賴低層模塊,二者都應該依賴抽象;抽象不應該依賴具體,具體應該依賴抽象

方法:針對接口編程,不要針對實現編程

本質:以抽象爲基礎搭建的結構比具體類搭建的結構要穩定的多

3.開閉原則

原則:對擴展的開放,對修改的關閉

目的:通過擴展已有軟件系統,可以提供新的功能;修改的關閉,保證穩定性和延續性

4.里氏替換原則

原則:所有引用基類的地方必須能透明地使用其子類對象;子類在擴展父類功能是不能破壞父類原有的 功能。

遵循方法:

1.子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。

2.當子類重載父類方法時,方法的形參要比父類方法的參數更寬鬆。

3.當子類實現父類的抽象方法時,方法的返回值要比父類嚴格。

5.迪米特法則

原則:一個對象應該與其他對象保持最少的瞭解。只與直接朋友交談。

目的:類與類之間的關係越密切瞭解越多,耦合度越大;儘量降低類與類之間的耦合。

(接口隔離原則:一個類對另一個類的依賴應該建立在最小的接口上)

6.單一職責原則

原則:類應該只有一個導致類變更的理由;即一個類只負責一項職責

目的:降低類的複雜度,提高系統的可維護性,修改時降低風險溢出


三.模式使用時思考的原則

1.保持簡單

 儘可能用最簡單的方式解決問題,簡單而彈性的設計,一般使用模式是最好的方法

2.設計模式不是萬能的

 模式是通用問題的經驗總結;使用模式時要考慮對其他部分的影響;不需要預留任何彈性的時候,刪除掉模式

3.何時需要模式

 找出設計中會變化的部分,通常就是需要考慮模式的地方;重構時考慮模式;

4.重構的時間就是模式的時間

 重構就是改變代碼來改進組織方式的過程;使用模式重構

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章