設計模式 依賴倒置

2021-10-09 08:31:04 字數 1553 閱讀 6876

高層模組不應該依賴底層模組,兩者都應該依賴其抽象;

抽象不應該依賴細節;

細節應該依賴抽象。

public

inte***ce

idriver

public

class

driver

implements

idriver

}public

inte***ce

icar

public

class

benz

implements

icar

}public

class

bmwimplements

icar

}public

class

client

}依賴的三種寫法

建構函式傳遞依賴物件——建構函式注入

set方法傳遞依賴物件——set依賴注入

介面宣告依賴物件——介面注入

我們得替老王主持想個辦法對不對?

不如把這個掃地的差事交給老王的師弟老方吧,老方負責去叫小二和尚還是小三和尚還是小四和尚去執行老王主持的命令。**可以這樣實現。

定義乙個掃地和尚的介面,**如下所示:

public

inte***ce

heshang

小二類的**修改如下所示:

public

class

xiaoer

implements

heshang

public

boolean

isyijinjing()

}小三類的**修改如下所示:

public

class

xiaosan

implements

heshang

}老方類的**如下所示:

public

class

laofang

return xiaoer;}}

如果老方確認小二和尚在練易筋經,就叫小三和尚。

老王類的**修改如下所示:

public

class

laowang

}測試類的**不改變,如下所示:

public

class

test

}老王現在是不是省心多了,他只管下命令,該叫誰去掃達摩院的地由他師弟老方去負責。

我們替老王想的這個辦法就叫控制反轉(inversion of control,縮寫為 ioc),它不是一種技術,而是一種思想——指導我們設計出松耦合的程式。

控制反轉從詞義上可以拆分為「控制」和「反轉」,說到控制,就必須找出主語和賓語,誰控制了誰;說到反轉,就必須知道正轉是什麼。

你看,在緊耦合的情況下,老王下命令的時候自己要通過 new 關鍵字建立依賴的物件(小二和尚或者小三和尚);而控制反轉後,老王要找的掃地和尚由他師弟老方負責,也就是說控制權交給了老方,是不是反轉了呢?

ioc/di

設計模式 依賴倒置

依賴倒置原則 dependence inversion principle 定義 high level modules should not depend upon low level modules,both should depend upon abstractions.abstractions...

設計模式 依賴倒置原則

what high level modules should note depend upon low level modules.both should depend 高層模組不應該依賴底層模組,兩者都應該其抽象 抽象不應該依賴細節 細節應該依賴抽象 模組間的依賴通過抽象發生,實現類之間不發生直接...

設計模式 依賴倒置 DIP

高層次的模組不應該依賴 於 低層次的模組,兩者都應該依賴於 抽象介面。抽象的介面不應該依賴於具體的實現,而具體的實現依賴於抽象的介面 這個可能和我們常見的 熟能生巧 成為反比,平時我們設計了很多具體實現,才慢慢發現,其中的道,於是後來就抽象出來一種靈巧的方式,完成我們的工作 但是在快速,協作的開發環...