依賴倒置原則(dependency inversion principle)dip
。這個原則的英文是high-level modules shouldn't depend on low-level modules. both modules should depend on abstractions. in addition, abstractions shouldn't depend on details.details depend on abstractions.
。意思是高層模組不要依賴底層模組。高層模組和底層模組都應該依賴抽象。抽象不要依賴具體實現,具體實現應該依賴抽象。
通常來說,呼叫者屬於高層模組,被呼叫者就是低層模組。為什麼叫依賴倒置或者依賴反轉呢?正常開發來說類a呼叫類b,類a屬於高層模組,類b是低層模組。高層模組依賴低層模組,需要呼叫低層模組的方法。直接和低層模組高度耦合。
如果這時候我們的低層模組需要適配不同的高層模組,那麼就無法復用。因為低層模組和以前的高層模組耦合在一起,如果修改適配新模組可能會導致以前的高層模組出現問題。
依賴倒置原則就是把這個依賴關係進行反轉。以前是高層模組依賴低層模組,現在我不依賴你了。咋倆都依賴抽象。我們使用抽象類或者介面。我們的實現都基於這個介面來進行,而不是產生直接的依賴關係。我們都依賴同樣的介面,同樣的抽象。
比如我們的電腦有cpu,鍵盤,滑鼠,記憶體,硬碟,顯示器這些東西,我們只要組裝起來就是電腦,這些東西就像高內聚的程式。內聚在一起,他們依賴相同的介面進行呼叫,你的羅技滑鼠
和雷蛇滑鼠
都使用同乙個介面。那麼電腦就可以正常運轉。
我們進行軟體設計的時候應該由上而下的設計,先進行抽象設計,然後來具體實現。如果先寫出具體實現在進行抽象設計,那麼抽象出來的東西就容易依賴具體實現。因為具體實現很可能會變,但是抽象一般不會改變。所以抽象使得程式更加穩定。
那麼為什麼抽象一般不會改變呢?這就是之前說的黎克特制替換原則。子類可以替換父類,需要改變我們只需要擴充套件具體實現就可以而不是修改抽象。
//電腦需要乙個能插入usb介面的滑鼠
class
computer
}inte***ce
usb//雷蛇滑鼠實現了usb介面
class
snakemouse
implements
usb}
//羅技滑鼠實現了usb介面
class
luomouse
implements
usb}
在這裡,不管是哪個滑鼠都可以使用,如果我們依賴具體的滑鼠,那麼就無法靈活更換了。兩邊,呼叫者和被呼叫者,高層模組和低層模組都依賴抽象。 設計原則之依賴倒置原則
定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不必要...
設計原則 依賴倒置原則
在物件導向程式設計領域中,依賴倒置原則 dependency inversion principle,dip 是指一種特定的解耦 傳統的依賴關係建立在高層次上,而具體的策略設定則應用在低層次的模組上 形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒 反轉 從而使得低層次模組依賴於...
依賴倒置原則 物件導向設計原則之依賴倒置原則
依賴倒置原則的定義 依賴倒置原則 dependence inversion principle,dip 是 object mentor 公司總裁羅伯特 馬丁 robert c.martin 於 1996 年在 c report 上發表的文章。依賴倒置原則的原始定義為 高層模組不應該依賴低層模組,兩者...