【設計模式】(二)之設計原則

設計模式的設計原則如下

  • 單一職責原則(Single Responsiblility Principle),簡稱SRP
  • 里氏替換原則(Liskov Substitution Principle),簡稱LSP
  • 依賴倒置原則(Dependence Inversion Principle),簡稱DIP
  • 接口隔離原則(Interface Segregation Principle),簡稱ISP
  • 迪米特法則(Law of Demeter Principle),簡稱LoD
  • 開閉原則(Open-Closed Principle),簡稱OCP

單一職責原則SRP

英文原話
Software entities should be open for extension, but closed for modification.

單一職責原則,一個類應該只有一個職責,不能有其他引起它變化的原因。

SRP有以下幾個優點

  • 降低類的複雜性
  • 提高類的可讀性
  • 提高代碼的可維護性和複用性
  • 降低因變更引起的風險

里氏替換原則LSP

就是一種在繼承時對於利弊的約束。

第一種定義
If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of S,The behavior of P is unchanged when o1 is substituted for o2 then T is a subtype of S.

這是比較貼切的定義,即如果對一個類型爲S的對象o1,都有類型T的對象o2,使得以S定義的所有程序P在所有的對象o1都替換成o2時,程序P的行爲沒有發生變化,那麼類型T是類型S的子類型。

第二種定義
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

所有引用基類的地方必須能夠透明地使用其子類對象。

在設計模式中體現里氏替換原則的有以下幾種模式:

  • 策略模式
  • 組合模式
  • 代理模式

依賴倒置原則DIP

英文原話
High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.

主要含義如下:

  1. 高層模塊不應該依賴底層模塊,兩者都依賴抽象
  2. 抽象不依賴細節
  3. 細節應該依賴抽象

在java的表現爲,模塊間的通過抽象依賴,實現類之間不直接依賴,其依賴關係都是通過接口或者抽象類產生。
更可以理解是面向接口編程的一種原則。

接口隔離原則ISP

第一種定義
Clients should not be forced to depend upon interfaces that they don’t use.

第二種定義
The dependency of one class to another one should depend on the smallest possible interface.

直白一點就是,一個模塊或者一個類對一個個模塊或者類直接按的依賴應該最小原則,不要建立一些不需要的依賴。不得不說,在接口交互設計上大家都會接觸到很多接口返回一堆不需要的依賴,日積月累以後,各種不需要的依賴到底清理也不是,不清理也不是。

迪米特法則LoD

迪米特法則又叫最少知識原則,意思就是一個對象應當對其他對象儘可能的少了解。
對迪米特法則進行應用的設計模式有以下兩種:

  • 外觀模式
  • 中介者模式

這在工作中很好的體現,如果你什麼事情都要去關聯上,即使你僅僅是關聯,到時候需要修改了,發現誰有一點變動你都要調整。細節瞭解太多,修改的會更多。所以在工作中,接口設計儘量的透明。讓別人能少的減少依賴。讓數據流轉儘可能的精簡。

開閉原則OCP

英文原話
Software entities should be open for extension, but closed for modification.

意思是,一個軟件實體應當對拓展開放,對其修改關閉。
開閉原則是最基礎的原則,其他原則都是開閉原則的具體形態。

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