設計模式2——設計原則篇
目錄
?一、依賴倒轉原則
二、單一職責原則(SRP)
三、合成|聚合復用原則(CARP)
四、開放-封閉原則
五、迪米特法則(LoD)
六、里氏代換原則
?七、接口隔離原則
?八、總結
?一、依賴倒轉原則
1、抽象不應該依賴細節,細節應該依賴于抽象。針對接口編程,不要對實現編程。2、高層模塊不應該依賴低層模塊。兩個都應該依賴抽象。
二、單一職責原則(SRP)
1、就一個類而言,應該僅有一個引起它變化的原因。2、如果一個類承擔的職責過多,就等于把這些職責耦合在一起,一個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭到意想不到的破壞。3、軟件設計真正要做的許多內容,就是發現職責并把那些職責相互分離。4、如果你能夠想到多于一個的動機去改變一個類,那么這個類就具有多于一個的職責。
三、合成|聚合復用原則(CARP)
1、盡量使用合成/聚合,盡量不要使用類繼承。2、其中:聚合是一種弱的擁有關系;而合成是強關系,表示整體與部分。
四、開放-封閉原則
1、軟件實體(類、模塊、函數等)應該可以擴展,但是不可修改。2、對于擴展是開放的、對于修改是封閉的。3、怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第一個版本以后不斷推出新的版本呢?---答案:開放-封閉4、無論模塊是多么的‘封閉’,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對于他設計的模塊應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然后構造抽象來隔離那些變化。5、在我們最初編寫代碼時,假設變化不會發生。當變化發生時,我們就創建抽象來隔離以后發生的同類變化。6、開放-封閉原則是面向對象設計的核心所在。 當然要注意,避免不及,也要避免過及。
五、迪米特法則(LoD)
1、如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用。2、在類的設計上,每個類應當盡量降低成員的訪問權限。3、強調類之間的松耦合,類之間的耦合越弱,越有利于復用,一個處在弱耦合的類被修改,不會對有關系的類造成波及。4、有種打鐵還需自身硬,減少耦合還得先減少自己放出去的權限。
六、里氏代換原則
1、子類型必須能夠替換掉它們的父類型。2、只有當子類可以替換掉父類,軟件單位的功能不受到影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。3、由于子類型的可替換性才使得使用父類型的模塊在無須修改的情況下就可以擴展了。
?七、接口隔離原則
1、客戶端不應該依賴它不需要的接口,即一個類對另一個類的依賴應該建立在最小的接口上。2、也即一個接口也不應該太復雜。
?八、總結
?核心思想可以提取出,為:
- 要高內聚、低耦合
- 要把可能會改變的地方隔離出來
- 要依賴抽象編程,而不是具體實現
?