名詞解釋html
依賴:一種模型元素之間的關係的描述。例如類A調用了類B,那麼咱們說類A依賴於類B。編程
耦合:一種模型元素之間的關係的描述。例如類A調用了類B或類B調用了類A,那麼咱們說類A與類B有耦合關係。設計模式
耦合度:模型元素之間的依賴程度的量化描述。架構
控制:一種模型元素之間的關係的描述。例如類A調用了類B,那麼咱們說類A控制類B。框架
緒論函數
架構設計的對象通常是類庫、框架和應用程序。其工做任務除了類庫、框架、應用程序各個模塊(類)之間的關係設計以外,還包括類庫、框架和應用程序三者之間關係的設計。而依賴倒置、控制反轉、依賴注入正是經常使用的一類設計模式。spa
依賴倒置、控制反轉、依賴注入三者含義和目標基本一致,即經過抽象接口解耦和消除依賴關係。架構設計
依賴倒置設計
從字面理解依賴倒置每每不知所云,經過了解其歷史淵源能夠很好的消除這種誤解。在面向結構編程時代,架構設計師每每採用自上而下的設計模式,先設計上層模塊,再設計下層模塊,如此層層分解,致使上層模塊嚴重依賴於下層模塊,下層模塊的一點變化都會致使上層地震。到了面向對象編程時代,架構設計師使用對象進行設計,經過抽象接口解耦各層之間的依賴關係,爲了與面向結構的設計模式區分開,同時體現面向對象的優點,也爲了譁衆取寵,就給這種新的設計模式起了個依賴倒置的名稱。htm
依賴倒置的核心思想是依賴於抽象。
依賴倒置的原則是上層模塊不依賴於下層模塊,而是依賴於一套抽象接口,上層模塊調用接口,下層模塊實現接口。以類庫和應用程序爲例,咱們把應用程序須要調用的功能抽象爲一組接口,而後由類庫實現這組接口,那麼應用程序就可使用任意實現了該接口的類庫,從而和類庫解耦。
控制反轉
控制反轉的來歷與依賴倒置類似,之前設計應用程序,雖然會引用類庫,但一切都在應用程序的控制之中。後來根據應用程序的不一樣場景,人們設計了相應的框架,有了框架以後,再設計應用程序時,就變成了爲框架增長自定義行爲的設計,控制權轉到了框架手裏,所以說控制權反轉了。
控制反轉是依賴倒置的一種具體實現,強調的是控制流程的依賴倒置,是框架設計的必用模式。框架基於依賴倒置模式設計:對於框架中不肯定的部分,框架抽象出一組接口,並依賴於這組接口進行實現,應用程序實現這組接口。
依賴注入
依賴注入也是依賴倒置的一種具體實現,是類庫設計的一種經常使用模式。類庫中的類基於依賴模式設計:某類依賴於接口,而不是具體的實現,由調用者在調用時傳入這些接口的具體實現類。
.Net中普遍使用此模式,好比StreamReader類,當使用StreamReader時,須要實例化一個Stream或其派生類,傳給StreamReader的構造函數,而後方能使用該類的方法。
弊病
依賴倒置的基礎是假設抽象是穩定的。對於咱們已經瞭解的事物,固然能夠實現很好的抽象,但對於還沒有認識清楚的事物,好比用戶需求,就很難保證這個抽象的穩定性。所以一旦這個抽象穩定的假設不成立,那麼依賴倒置不但不能發揮優點,反倒可能成爲包袱。
【轉載】http://www.cnblogs.com/luckdv/archive/2011/07/21/2112767.html