抽象不該該依賴細節,細節應該依賴抽象。針對接口編程,不要針對實現編程。
A:高層模塊不該該依賴低層模塊。兩個都應該依賴抽象。
B:抽象不該該依賴細節。細節應該依賴抽象。
爲何要叫倒轉?
面向過程的開發是,爲了使得代碼能夠複用,通常都會把這些經常使用代碼寫成許許多多函數的程序庫,這樣咱們在作新項目是,去調用這些底層的函數就能夠了。好比咱們作的項目大可能是要訪問數據庫,因此咱們就把訪問數據庫的代碼寫成了函數,每次作新項目是就去調用這些函數,這就叫高層模塊依賴底層模塊。
里氏替換原則
子類型必須可以替換掉它們的父類型。
一個軟件實體若是使用的是一個父類的話,那麼必定適用於其子類,並且察覺不出父類對象和子類對象的區別。也就是說,在軟件裏面,把父類都替換成它的子類,程序的行爲沒有變化。
只有子類能夠替換掉父類,軟件單位的功能不受到影響是,父類才能真正被複用,而子類也可以在父類的基礎上增長新的行爲。
因爲子類型的可替換性才使得使用父類類型的模塊在無需修改的狀況下就能夠擴展。
依賴倒轉其實能夠說是面向對象設計的標誌,用哪一種語言編寫程序不重要,若是編寫時考慮的都是如何
針對抽象編程而不是針對細節編程,即程序中全部依賴關係都是終止於抽象類或者接口,那就是面向對象的設計,反之就是過程化的設計了。