定義:高層模組不應該依賴低層模組,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。問題:類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的**來達成。這種場景下,類a一般是高層模組,
負責複雜的業務邏輯;類b和類c是低層模組,負責基本的原子操作;假如修改類a,會給程式帶來不必要的風險。
解決:將類a修改為依賴介面i,類b和類c各自實現介面i,類a通過介面i間接與類b或者類c發生聯絡,則會大大降低修改類a的機率。
舉個栗子:講乙個讀者讀書的故事。。。
1. 新建乙個類book,包含獲取書的內容的方法,**如下:
2. 新建乙個類reader,依賴類book,包含乙個讀書的read方法,**如下:3. 在類dipfragment中,通過類reader的物件呼叫read方法來實現讀者讀書的功能,**如下:4. 執行後的效果是:以上,就實現了乙個讀者讀書的故事。現在要改需求,我們不讀書了,改讀報紙了,那麼我們要新建乙個報紙類news*****,同樣包含乙個獲取報紙的內容的方法,然後去修改讀者類reader,替換掉類book,又去修改實現類dipfragment,這樣是不是覺得改動的地方太多了,跟重新寫無異,試想一下,如果原有的功能比較複雜的話,那樣再進行需求變動,要做的工作是很多的,原因就是reader與book的耦合性太高,所以必須降低他倆之間的耦合度才行,於是我們可以引入抽象的介面iread,包含乙個獲取讀物內容的getreadcontent方法,具體實現如下:1. 新增乙個抽象的介面iread,包含乙個獲取讀物內容的getreadcontent方法,**如下:2. 新增乙個報紙類news*****,實現介面iread;同樣讓類book也去實現介面iread。**如下:3. 讓高層模組去依賴介面,即類reader依賴介面iread,它負責完成主要的具體的業務邏輯。**如下:4. 在類dipfragment中,通過類reader的物件呼叫read方法來實現讀者讀書的功能,**如下:5. 執行後的效果是:以上就是採用的依賴倒置原則,降低了reader和book、news*****之間的耦合性,無論以後怎樣擴充套件dipfragment類,都不需要再修改reader類了,給多人並行開發帶來了極大的便利,reader和book、news*****可以同時開工,互不影響,這樣也就提高了系統的穩定性,降低了修改程式造成的風險。原則:面向介面程式設計。抽象指的是介面或抽象類,細節就是具體的實現類,使用介面或者抽象類的目的是制定好規範和契約,而不去涉及任何具體的操作,把展現細節的任務交給他們的實現類去完成。
注意: 1. 在**中傳遞引數或關聯關係時,盡量引用高層的抽象層類,即使用介面和抽象類進行變數宣告、引數型別宣告、
方法返回型別宣告以及資料型別的轉換;
2. 當乙個物件和其他物件有依賴關係時,可以利用依賴注入的方法將類之間進行解耦,主要有:構造注入、set方法注入
和介面注入;
3. 開閉是原則,黎克特制是基礎,依賴倒置是手段;
4. 低層模組盡量都要有抽象類或介面,或者兩者都有;
5. 變數的宣告型別盡量是抽象類或介面;
6. 使用繼承時遵循黎克特制替換原則。
好處: 1. 可降低類之間的耦合性;
2. 可提高系統的穩定性;
3. 可降低修改程式所造成的風險。
設計原則 依賴倒置原則
在物件導向程式設計領域中,依賴倒置原則 dependency inversion principle,dip 是指一種特定的解耦 傳統的依賴關係建立在高層次上,而具體的策略設定則應用在低層次的模組上 形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒 反轉 從而使得低層次模組依賴於...
依賴倒置原則 物件導向設計原則之依賴倒置原則
依賴倒置原則的定義 依賴倒置原則 dependence inversion principle,dip 是 object mentor 公司總裁羅伯特 馬丁 robert c.martin 於 1996 年在 c report 上發表的文章。依賴倒置原則的原始定義為 高層模組不應該依賴低層模組,兩者...
opp設計原則 依賴倒置原則
定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題由來 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不...