---
# System prepended metadata

title: '相依性反向原則(DIP: Dependence Inversion Principle)'
tags: [book, principle, Design Patterns]

---

# 相依性反向原則(DIP: Dependence Inversion Principle)
###### tags: `Design Patterns` `book` `principle`

這個原則包含了兩個原則主題：

* 高層模組不應該相依於低層模組，兩者都應該相依於抽象概念
* 抽象介面不應該相依於實作，而實作應該相依於抽象介面

當高層模組定義了構通介面之後，與低層模組的溝通就應該只透過介面來進行，而在實務上，這個介面可能是以一個類別的變數或物件參考來表示。請注意，在使用這個變數或物件參考的過程中，不能去做任何型別轉換，因為這樣就限定了高層模組只使用某一個低層模組的特定實作。而且，子類別在重新實作時，都要按照介面類別所定義的方法進行實作，不應該在去新增其它方法，讓高層模組有機會麗容轉型的方式去呼叫使用。