DIP、IOC、DI

定義html

DIP(Dependence Inversion Principle):依賴(就是用到涉及到)倒置原則,高層模塊(抽象層級較高,包括的範圍較廣,比較抽象)依賴底層模塊的具體事物,底層發生變更的時候會牽連到高層,這是耦合很重的設計,破壞了開閉原則,而高層模塊依賴抽象,底層模塊一樣依賴抽象(經過抽象在高低層之間通訊,沒有直接的依賴,都依賴抽象,固然抽象自己應該要是穩定的)就會避免這樣的問題,總結爲第一條規則:高層模塊不該該依賴低層模塊,他們都應該依賴抽象。倒置一說就是避免人的慣性思惟帶來的耦合重的缺點,讓本來依賴具體的思惟方式改爲依賴抽象,總結爲第二條規則:抽象不依賴具體,而具體依賴抽象。angularjs

IOC(Inversion of Control):控制反轉,爲兩個相互依賴的組件提供抽象,將底層依賴的對象(來自高層)交給第三方系統來控制,引入了第三方控制系統,而不是普通的經過NEW的方式來獲取對象。設計模式

DI(Denpdency Injection):依賴注入,將依賴對象的建立放到被依賴對象外部實現。把依賴關係包裝到構造函數或者其餘方法中,經過這種在外部提供內部依賴對象的方式,好像從外往裏面注入了依賴對象。注入的方式有不少,構造函數,經過構造函數傳參將依賴對象注入進去;屬性注入,經過設置對象的屬性來注入依賴對象;接口注入,提供一個具備註入依賴對象的方法契約的接口,被依賴的對象實現該接口,而且調用接口方法設置依賴對象。前面集中是手動方式設置依賴對象,經過IOC容器動態建立注入依賴對象,IOC容器有如下功能:動態建立、注入依賴對象;管理對象生命週期;映射依賴關係,以下:

框架

public class FacadeFactory
    {
        public static T GetObject<T>() where T : IBaseFacade
        {
            IApplicationContext ctx = ContextRegistry.GetContext("Promocode.Facade");
            return (T)ctx.GetObject(typeof(T).Name);            
        }
    } //這是IOC容器
 
//這是抽象與具體的映射(依賴)關係
<object id="IMyCouponFacade" type="Payment.Promocode.Facade.MyCouponFacade, Payment.Promocode.Facade" />
<object id="IMyCouponBackManagerFacade" type="Payment.Promocode.Facade.MyCouponBackManagerFacade, Payment.Promocode.Facade" />

區別與聯繫函數

DIP是軟件設計原則,告訴咱們的是對錯,不是具體如何作,IOC是設計模式,是軟件開發中總結出來的可重用的解決方案,能夠解決一些實際問題。DI是IOC的具體實現方式之一,IOC容器是DI構造注入的框架。url

 
同時能夠對比看 angularjs的依賴注入:
參考:http://blog.csdn.net/renfufei/article/details/19038123 
相關文章
相關標籤/搜索