依賴倒置原則(Dependency Inversion Principle: DIP)

依賴倒置原則(Dependency Inversion Principle: DIP)

高層模塊不應該依賴于底層模塊,二者應該都依賴于抽象

抽象不應該依賴于具體細節,細節應該依賴于抽象

這里的所有觀點摘抄自《敏捷軟件開發原則、模式與實踐》,原著Robert C. Martin,鄧輝等譯。

其實依賴倒置的原則很好理解,但是在實際應用中卻不容易識別出來。

現實中有很多這樣的例子,例如客廳里面要放置一個沙發。一種方案是,先去挑好沙發,然后根據沙發的形狀和尺寸來
然后把客廳改造成合適沙發的樣子。此時可以看到客廳的形狀就會嚴重依賴于沙發的形狀。另外一種辦法,則是預先
設計好房子的格局。然后去根據客廳的大小尺寸來挑選合適的沙發。

這個例子里面,房子就是高層模塊,不會經常變動,沙發屬于底層模塊。兩者依賴的抽象是什么呢,就是房子里面預留
的沙發的尺寸以及根據布局所決定的沙發的樣式顏色。

層次化

書里面引用了Booch的一段話:"所有結構良好的面向對象框架都具有清晰地層次定義,每個層次通過一個定義良好
的、受控的接口向外提供了一組內聚的服務。"

Booch是誰?UML語言的創立者。

也就是說,一個好的面向對象設計,都應該是層次清晰的。一旦有了層次,那就會有高層次和低層次之分,隨之而來
的也就有了依賴關系。我們習慣于把穩定的,不怎么發生改變的層稱為高層次。把經常發生變化的,可以被替代的稱為
低層次。

這樣的例子如,電腦內部的主板和顯卡,主板和內存,主板和CPU之間的關系。主板處于一個相對穩定的結構,所以屬于
高層次,而其他的配件都是經常發生變化的部分,所以屬于低層次。

回到DIP的話題,高層次和低層次究竟是一個什么樣的關系,究竟誰占主導地位,誰依賴于誰。我們先來看一下高層次
依賴于低層次。拿上面的例子來說,就是內存,顯卡,CPU占主導地位,主板使用了內存,顯卡,CPU所提供的方法。這樣
一來,無論是內存,顯卡還是CPU,只要其中一個進行更換,那么主板要相應的進行更換。這對消費者來說,簡直就是個
災難性的事情。

再來考慮,低層次依賴于高層次。這樣一來,主板只需要定義好需要的接口,低層的內存,CPU,顯卡根據這個接口來提供
具體的實現。

傳統概念中,高層次要適配低層次,因為是低層次提供了對外的接口,高層次只能依賴于低層次所提供的接口,沒有任何的
自主性。聯想到計劃經濟的產品的生產,就是這樣。DIP意味著主動權在(接口)高層次,在使用接口的人手上,高層次
需要什么,低層次就提供什么。同樣接口的作用也實現了高低層次之間的解耦。

著名的Hollywood原則:"Don't call us, we'll call you."

抽象

DIP中很關鍵的概念就是抽象。DIP建議所有的依賴關系都應該終止于抽象類或者接口。

  • 任何變量都不應該持有指向具體類的指針或者引用

這點很好理解,具體類的變化會導致依賴關系的不穩定,從而違反了DIP。

  • 任何類都不應該從具體類派生

依然是因為具體類的改變,會導致派生類依賴于具體類的改變。違反DIP。

  • 任何方法都不應該覆寫任何基類中已經實現了的方法
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373