高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。高層模組主要負責複雜的業務邏輯,低層模組主要負責基本的原子操作。
高層模組本來依賴低層模組,只有依賴低層模組,才能使用低層模組的功能。那為什麼說高層模組不應該依賴低層模組?不是很奇怪嗎?
其實應該這樣說,高層模組不應該直接依賴低層模組,而是通過抽象類或介面產生依賴關係。
我們設計一台機器,生產糖的,初始的原料只有甘蔗
public
class cane
}public
class machine
}public
class client
}
現在又增加一種原材料,甜菜
public
class beet
}
因為目前這台機器只能使用甘蔗產糖,不接受甜菜這種原材料,所以我們得「修理」機器,讓它接受甜菜這種材料產糖
public
class machine
public
void
make(beet beet)
}
如果又增加一種原材料呢,結果還得繼續「修理」機器!我們想哈,既然是產糖的機器,那它應該能接受各種具有轉化為糖的原材料才是呀!ok,我們把具有轉化為糖的抽象為乙個介面:
public
inte***ce
isugar
public
class
cane
implements
isugar
}public
class
beet
implements
isugar
}public
class
machine
}
這樣的話,這台機器就可以接受各種能轉化為糖的原材料了,無論來了哪種原材料,也不用「修理」機器了。
例子中,機器屬於高層模組,原材料屬於低層模組,機器並沒有直接依賴甘蔗或者甜菜(細節),而是依賴能轉化為糖的原材料(抽象)。
這樣設計的好處是,無論怎麼實現或擴充套件低層模組,高層模組幾乎不受影響,因為高層並不直接依賴低層模組具體實現。
所以遵循依賴倒置原則可以降低類之間的耦合性,提高系統的穩定性,降低修改程式造成的風險。
要遵守依賴倒置原則,要求我們做到:
低層模組盡量依賴抽象類或介面;
變數宣告的型別盡量是抽象類或是介面;
如果真正做到了依賴倒置,那麼你也應該理解面向介面程式設計了,加油!!
設計原則 依賴倒置原則
在物件導向程式設計領域中,依賴倒置原則 dependency inversion principle,dip 是指一種特定的解耦 傳統的依賴關係建立在高層次上,而具體的策略設定則應用在低層次的模組上 形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒 反轉 從而使得低層次模組依賴於...
設計原則之依賴倒置原則
定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不必要...
opp設計原則 依賴倒置原則
定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題由來 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不...