對比依賴倒置,控制反轉,依賴注入

來源:互聯網
上載者:User

1,依賴倒置:
先說明什麼是"正置"
正置就是,當你設計一些類庫的時候,考慮到使用者的需要定義一些介面,使用者的應用程式依賴這些介面

對比"正置"和"倒置"
正置:應用依賴介面,介面由類庫設計者定義
優點:類庫實現上自由度大,實現容易。
缺點:類庫設計複雜,要預測應用的需求,同時有可能不符合應用的需求

倒置:應用定義介面,類庫設計者實現介面,按照介面實作類別庫
優點:類庫設計不再需要預測,肯定符合應用需求
缺點:類庫有可能難以實現

簡單來說,正置和倒置的區別在於,誰來制定標準。現實中因為需求的定義是客戶決定的,所以倒置更
適合程式的設計。從需求出發,到底層實現。

使用目的:便於應用按照需求設計
關注點:介面的設計
---------------------------------------------
2,控制反轉:
正常的控制:
沒有一定的控制流程程,下一個流程由上一個流程決定,實現應用需要自己控制流程程
控制反轉   :
抽象出固定的流程,實現應用就是填充流程中的一個個點。
所有的架構都是基於控制反轉的。Windows GUI開發也多是這樣。
目的:高度抽象,設計架構
關注點:流程的設計
---------------------------------------------
3,依賴注入
原始的情況:
應用自己new 類,或者使用原廠模式建立類
依賴注入:
容器建立類,通過建構函式,setter方法,介面等方法,運行時"注入"到應用中

實現:
Spring         setter方法
webwork IOC   實現介面的方法
pico    建構函式的方法

目的:完全分離開發
關注點:構造對象

---------------------------------------------
關係:
"控制反轉"是"依賴倒置"的一種,"依賴注入"是在"控制反轉"的基礎上,讓容器來完成"注入"過程。
---------------------------------------------
最需要依賴注入的情況:
"調用者"和多個"被調用者"分別開發,分別打包分發,實施者根據實際情況決定使用哪個"被調用者"被使用
做成可配製的,這種情況是經常需要的。這個時候調用者內不能出現這樣的代碼:
interface inter = new interfaceimplA();類似的語句。因為使用的可能是interfaceimplB
為了避免這樣語句的出現,我們直接使用介面,而對象的構造延遲,讓容器根據實施者的配製來構造,並注入
正確的位置。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.