DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          控制反轉的資料的集合及簡單的概念對比

          控制反轉:
          控制反轉的資料的集合
          參考一、
          標題:向依賴關系宣戰----依賴倒置、控制反轉和依賴注入辨析
          url:http://www.contextfree.net/wangyw/source/dip_ioc.html
          說明:詳細分析了幾個概念的不同
          參考二、
          Spring guide
          參考三、
          WebWork In Action IOC一章
          參考四、
          Martin fowler的文章
          http://www.aygfsteel.com/Files/dreamstone/DependencyInjection.rar
          強烈建議大家看一下第一篇文章和第四篇,作者寫的真的很好

          對比依賴倒置,控制反轉,依賴注入?
          ---------------------------------------------
          1,依賴倒置:
          先說明什么是"正置"
          正置就是,當你設計一些類庫的時候,考慮到用戶的需要定義一些接口,用戶的應用程序依賴這些接口

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

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

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

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

          實現:
          Spring        setter方法
          webwork IOC  實現接口的方法
          pico   構造函數的方法

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

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

           

           

           

           

           

           

           


           

          posted on 2006-12-04 17:57 dreamstone 閱讀(1885) 評論(0)  編輯  收藏 所屬分類: 設計模式

          主站蜘蛛池模板: 水富县| 府谷县| 鄂托克旗| 钟祥市| 辽宁省| 永登县| 漳州市| 芒康县| 酒泉市| 吉木乃县| 神池县| 乌兰察布市| 西宁市| 阿克陶县| 垣曲县| 额尔古纳市| 庐江县| 东乌珠穆沁旗| 上杭县| 乌拉特中旗| 司法| 安顺市| 宁安市| 农安县| 广元市| 明光市| 稷山县| 徐闻县| 舒兰市| 石门县| 达尔| 鄂尔多斯市| 拉孜县| 武安市| 九龙坡区| 铁岭县| 吴江市| 都昌县| 漯河市| 珠海市| 长葛市|