[設計模式]設計模式之依賴倒置原則

依賴倒置—依賴注入,控制反轉

如果一個類A的功能實現需要藉助於類B,那麼就稱類B是類A的依賴,
如果在類A的內部去實例化類B,那麼兩者之間會出現較高的耦合,
一旦類B出現了問題,類A也需要進行改造,如果這樣的情況較多,
每個類之間都有很多依賴,那麼就會出現牽一髮而動全身的情況,
程序會極難維護,並且很容易出現問題。
要解決這個問題,就要把A類對B類的控制權抽離出來,交給一個第三方去做,
把控制權反轉給第三方,就稱作控制反轉(IOC Inversion Of Control)。
控制反轉是一種思想,是能夠解決問題的一種可能的結果,
而依賴注入(Dependency Injection)就是其最典型的實現方法
。由第三方(我們稱作IOC容器)來控制依賴,
把他通過構造函數、屬性或者工廠模式等方法,注入到類A內,
這樣就極大程度的對類A和類B進行了解耦。

IOC (Inversion of Control) 控制反轉

遵循依賴倒置原則的一種代碼設計方案,依賴的創建 (控制) 由主動變爲被動 (反轉)。上述的第三方。

DIP (Dependence Inversion Principle)依賴倒置原則

程序要依賴於抽象接口,不要依賴於具體實現。依賴注入是該原則的一種實現方式

  1. 高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象
  2. 抽象不應該依賴於細節,細節應該依賴於抽象

依賴倒置的具體的表現:

  1. 模塊間的依賴通過抽象發生,實現類之間不直接發生依賴關係。(依賴關係通過接口或者抽象類)
  2. 接口或者抽象類不依賴於實現類。實現類依賴接口 或者 抽象類

上面提到的可以用一句話概括,面向接口編程(面向對象設計的精髓)

優點:

  1. 採用依賴倒置原則,可以減少類之間的耦合性。提高系統的穩定性,提高可讀性和可維護性。
  2. 當需求的變更時,最終只需要修改高層的業務場景類(也就是調用的地方)

抽象更深入的理解:

  1. 抽象是對實現的約束,對實現者而言,是一種契約(約束作用)
  2. 約束自己也約束別人,保證雙方按照契約(抽象)就行開發

DI (Dependency Injection) 依賴注入

依賴注入是控制反轉的一種具體實現方法。通過參數的方式從外部傳入依賴,將依賴的創建由主動變爲被動 (實現了控制反轉)

  1. 構造函數,傳遞依賴對象 例如:public Driver( ICar_car){}
  2. 通過setter 方法 例如:public void setCar(ICar_car){}
  3. 接口聲明 例如:public class Benz implements ICar{}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章