OO設計的依賴倒置原則

2021-05-27 10:05:48 字數 1439 閱讀 2397

dependency inversion principle (dip) - oo設計的依賴倒置原則

該文提出了依賴倒置原則的2個重要方針

a. high level modules should not depend upon low level modules. both should depend upon abstractions.

b. abstractions should not depend upon details. details should depend upon abstractions.

中文意思為:

a. 高層模組不應該依賴於低層模組,二者都應該依賴於抽象

b. 抽象不應該依賴於細節,細節應該依賴於抽象

概念解說:

依賴:在程式設計中,如果乙個模組a使用/呼叫了另乙個模組b,我們稱模組a依賴模組b。

高層模組與低層模組:往往在乙個應用程式中,我們有一些低層次的類,這些類實現了一些基本的或初級的操作,我們稱之為低層模組;另外有一些高層次的類,這些類封裝了某些複雜的邏輯,並且依賴於低層次的類,這些類我們稱之為高層模組。

為什麼叫做依賴倒置(dependency inversion)呢?

物件導向程式設計相對於面向過程(結構化)程式設計而言,依賴關係被倒置了。因為傳統的結構化程式設計中,高層模組總是依賴於低層模組。

問題的提出:

如果「高層模組」過分依賴「低層模組」,一方面一旦「低層模組」需要替換或者修改,「高層模組」將受到影響;另一方面,高層模組很難可以重用。

比如,乙個copy模組,需要把來自keyboard的輸入複製到print,即使對keyboard和print的封裝已經做得非常好,但如果copy模組裡直接使用keyboard與print,copy任很難被其他應用環境(比如需要輸出到磁碟時)重用。

問題的解決:

為了解決上述問題,robert c. martin氏提出了oo設計的dependency inversion principle (dip) 原則。

dip給出了乙個解決方案:在高層模組與低層模組之間,引入乙個抽象介面層。

high level classes(高層模組) --> abstraction layer(抽象介面層) --> low level classes(低層模組)

抽象介面是對低層模組的抽象,低層模組繼承或實現該抽象介面。

這樣,高層模組不直接依賴低層模組,高層模組與低層模組都依賴抽象介面層。

當然,抽象也不依賴低層模組的實現細節,低層模組依賴(繼承或實現)抽象定義。

robert c. martin氏給出的dip方案的類的結構圖:

policylayer-->mechanisminte***ce(abstract)--mechanismlayer-->utilityinte***ce(abstract)--utilitylayer

類與類之間都通過abstract layer來組合關係。

設計原則 依賴倒置原則

在物件導向程式設計領域中,依賴倒置原則 dependency inversion principle,dip 是指一種特定的解耦 傳統的依賴關係建立在高層次上,而具體的策略設定則應用在低層次的模組上 形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒 反轉 從而使得低層次模組依賴於...

設計原則之依賴倒置原則

定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不必要...

opp設計原則 依賴倒置原則

定義 高層模組不應該依賴低層模組,二者都應該依賴其抽象 抽象不應該依賴細節 細節應該依賴抽象。問題由來 類a直接依賴類b,假如要將類a改為依賴類c,則必須通過修改類a的 來達成。這種場景下,類a一般是高層模組,負責複雜的業務邏輯 類b和類c是低層模組,負責基本的原子操作 假如修改類a,會給程式帶來不...