大話設計模式:第5章 依賴倒轉原則

第5章:依賴倒轉原則

依賴倒轉原則

面向對象關係要求強內聚、鬆耦合

依賴倒轉原則(依賴倒置原則,dependence inversion principle,DIP):

  1. 高層模塊不應該依賴低層模塊。兩個都應該依賴抽象。
  2. 抽象不應該依賴細節。細節應該依賴抽像。

依賴倒轉原則:抽象不應該依賴細節,細節應該依賴於抽象,即,針對接口編程,不要對實現編程。不管高層模塊還是低層模塊,如果它們都依賴於抽象,具體一點就是接口或抽象類,只要接口是穩定的,那麼任何一個的更改都不用擔心其它受到影響,這就使得無論高層模塊還是低層模塊都可以很容易被複用。依賴倒轉可以說是面向對象設計的標誌,用哪種語言來編寫程序不重要,如果編寫時考慮的都是如何針對抽象編程而不是針對細節編程,即程序中所有的依賴關係都是終止於抽象類或者接口,那就是面向對象的設計,反之就是過程化的設計。

里氏代換原則

里氏代換原則(liskov substitution principle,LSP):子類型必項能夠替換掉它們的父類型。

里氏代換原則(Barbara Liskov,1988年):一個軟件實體如果使用的是一個父類的話,那麼一定適用於其子類,而且它察覺不出父類對象和子類對象的區別。也就是說,在軟件裏面,把父類都替換成它的子類,程序的行爲沒有變化。

例:企鵝類不能繼承於鳥類

在這裏插入圖片描述

里氏代換原則使得繼承複用成爲可能,只有當子類可以替換掉父類,軟件單位的功能不受到影響時,父類才能其正被複用,而子類也能夠在父類的基礎上增加新的行爲。

在這裏插入圖片描述
由於里氏代換原則,子類型的可替換性才使得使用父類類型的模塊在無需修改的情況下就可以擴展,使得開放-封閉原則、依賴倒轉原則成爲可能,高層模塊不應依賴低層模塊,兩個都應該依賴抽象。

在這裏插入圖片描述