依賴倒轉原則--學習筆記

Aussie_發表於2020-11-27

依賴倒置原則定義

1、上層模組不應該依賴底層模組,它們都應該依賴於抽象。
2、抽象不應該依賴於細節,細節應該依賴於抽象。

首先,這個原則聽起來很像是“針對介面程式設計,不針對現實程式設計”,不是嗎?的確很相似,然而這裡更強調“抽象”。

依賴倒置原則,究竟倒置在哪裡?

在依賴倒置原則中的倒置指的是和一般OO設計的思考方式完全相反。

舉個例子,現在你需要實現一個比薩店,你第一件想到的事情是什麼?我想到的是一個比薩店,裡面有很多具體的比薩,如:芝士比薩、素食比薩、海鮮比薩……
比薩店是上層模組,比薩是下層模組,如果把比薩店和它依賴的物件畫成一張圖,看起來是這樣:
在這裡插入圖片描述
沒錯!先從頂端開始,然後往下到具體類,但是,正如你看到的你不想讓比薩店理會這些具體類,要不然比薩店將全都依賴這些具體類。現在“倒置”你的想法……別從上層模組比薩店開始思考,而是從下層模組比薩開始,然後想想看能抽象化些什麼。你可能會想到,芝士比薩、素食比薩、海鮮比薩都是比薩,所以它們應該共享一個Pizza介面。對了,你想要抽象化一個Pizza。好,現在回頭重新思考如何設計比薩店。

在這裡插入圖片描述
圖一的依賴箭頭都是從上往下的,圖二的箭頭出現了從下往上,依賴關係確實“倒置”了

另外,此例子也很好的解釋了“上層模組不應該依賴底層模組,它們都應該依賴於抽象。”,在最開始的設計中,高層模組PizzaStroe直接依賴低層模組(各種具體的Pizaa),調整設計後,高層模組和低層模組都依賴於抽象(Pizza)

依賴倒置原則的本質就是通過抽象(介面或抽象類)使各個類或模組的實現彼此獨立,不互相影響,實現模組間的鬆耦合。我們在專案中使用這個原則要遵循下面的規則:

1、每個類儘量都有介面或者抽象類,或者抽象類和介面兩都具備;

2、變數的表面型別儘量是介面或者抽象類;

3、任何類都不應該從具體類派生;

4、儘量不要覆寫基類的方法;

5、如果基類是一個抽象類,而這個方法已經實現了,子類儘量不要覆寫。類間依賴的是抽象,覆寫了抽象方法,對依賴的穩定性會有一定的影響;

6、結合里氏替換原則使用;
  
  
參考資料:
作者:陳琰AC
原文連結:https://www.jianshu.com/p/c3ce6762257c
作者:酷學大叔
原文連結:https://www.cnblogs.com/az4215/p/11462878.html

相關文章