日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之控制反转和依赖注入的使用小结

發(fā)布時間:2024/8/26 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之控制反转和依赖注入的使用小结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

控制反轉(zhuǎn)

控制反轉(zhuǎn)是一種思想,Inversion of Control,縮寫為IoC,是面向?qū)ο缶幊讨械囊环N設(shè)計原則,可以用來減低計算機(jī)代碼之間的耦合度。參考

為什么要用控制反轉(zhuǎn)的思想

主要是為了高內(nèi)聚、低耦合

高內(nèi)聚

模塊內(nèi)部要高度聚合

低耦合

模塊和模塊之間的耦合度要盡量低

高耦合的問題 - 依賴過多

從圖中可以看到,軟件中的對象就像齒輪一樣,協(xié)同工作,但是互相耦合,一個零件不能正常工作,整個系統(tǒng)就崩潰了。這是一個強(qiáng)耦合的系統(tǒng)。齒輪組中齒輪之間的嚙合關(guān)系,與軟件系統(tǒng)中對象之間的耦合關(guān)系非常相似。對象之間的耦合關(guān)系是無法避免的,也是必要的,這是協(xié)同工作的基礎(chǔ)。現(xiàn)在,伴隨著工業(yè)級應(yīng)用的規(guī)模越來越龐大,對象之間的依賴關(guān)系也越來越復(fù)雜,經(jīng)常會出現(xiàn)對象之間的多重依賴性關(guān)系,因此,架構(gòu)師和設(shè)計師對于系統(tǒng)的分析和設(shè)計,將面臨更大的挑戰(zhàn)。對象之間耦合度過高的系統(tǒng),必然會出現(xiàn)牽一發(fā)而動全身的情形。

Apple apple;public AppleX(){apple = new Apple(); } //AppleX對Apple有依賴 //如果new Apple()很慢的話,單測就很困難 //Apple的創(chuàng)造方式發(fā)生變化,比如說,Apple(String version)

高耦合的解決 - 控制反轉(zhuǎn)

為了解決對象間耦合度過高的問題,軟件專家Michael Mattson提出了IOC理論,用來實現(xiàn)對象之間的“解耦”。

控制反轉(zhuǎn)(Inversion of Control)是一種是面向?qū)ο缶幊讨械囊环N設(shè)計原則,用來減低計算機(jī)代碼之間的耦合度。其基本思想是:借助于“第三方”實現(xiàn)具有依賴關(guān)系的對象之間的解耦。

Dependency injection是控制反轉(zhuǎn)的一種技術(shù),簡而言之,就是不經(jīng)過自己初始化依賴,而通過外部(第三方)來傳入依賴的方式。

實例的創(chuàng)建工作交給容器來完成

由于引進(jìn)了中間位置的“第三方”,也就是IOC容器,使得A、B、C、D這4個對象沒有了耦合關(guān)系,齒輪之間的傳動全部依靠“第三方”了,全部對象的控制權(quán)全部上繳給“第三方”IOC容器,所以,IOC容器成了整個系統(tǒng)的關(guān)鍵核心,它起到了一種類似“粘合劑”的作用,把系統(tǒng)中的所有對象粘合在一起發(fā)揮作用,如果沒有這個“粘合劑”,對象與對象之間會彼此失去聯(lián)系,這就是有人把IOC容器比喻成“粘合劑”的由來。

Dependency injection(依賴注入)

Apple apple;public AppleX(Apple apple){this.apple = apple; } //Apple 已經(jīng)在外部初始化

Inject現(xiàn)實例子

一個人(Java實例,調(diào)用者)需要一把斧子(Java實例,被調(diào)用者)。

(1)原始社會里,幾乎沒有社會分工。需要斧子的人(調(diào)用者)只能自己去磨一把斧子(被調(diào)用者)。對應(yīng)的情形為:Java程序里的調(diào)用者自己創(chuàng)建被調(diào)用者。

(2)進(jìn)入工業(yè)社會,工廠出現(xiàn)。斧子不再由普通人完成,而在工廠里被生產(chǎn)出來,此時需要斧子的人(調(diào)用者)找到工廠,購買斧子,無須關(guān)心斧子的制造過程。對應(yīng)Java程序的簡單工廠的設(shè)計模式。

(3)進(jìn)入“按需分配”社會,需要斧子的人不需要找到工廠,坐在家里發(fā)出一個簡單指令:需要斧子。斧子就自然出現(xiàn)在他面前。對應(yīng)Spring的依賴注入。

第一種情況下,Java實例的調(diào)用者創(chuàng)建被調(diào)用的Java實例,必然要求被調(diào)用的Java類出現(xiàn)在調(diào)用者的代碼里。無法實現(xiàn)二者之間的松耦合。

第二種情況下,調(diào)用者無須關(guān)心被調(diào)用者具體實現(xiàn)過程,只需要找到符合某種標(biāo)準(zhǔn)(接口)的實例,即可使用。此時調(diào)用的代碼面向接口編程,可以讓調(diào)用者和被調(diào)用者解耦,這也是工廠模式大量使用的原因。但調(diào)用者需要自己定位工廠,調(diào)用者與特定工廠耦合在一起。

第三種情況下,調(diào)用者無須自己定位工廠,程序運(yùn)行到需要被調(diào)用者時,系統(tǒng)自動提供被調(diào)用者實例。事實上,調(diào)用者和被調(diào)用者都處于Spring的管理下,二者之間的依賴關(guān)系由Spring提供。

所謂依賴注入,是指程序運(yùn)行過程中,如果需要調(diào)用另一個對象協(xié)助時,無須在代碼中創(chuàng)建被調(diào)用者,而是依賴于外部的注入。Spring的依賴注入對調(diào)用者和被調(diào)用者幾乎沒有任何要求,完全支持對POJO之間依賴關(guān)系的管理。


想要看到更多瑋哥的學(xué)習(xí)筆記、考試復(fù)習(xí)資料、面試準(zhǔn)備資料?想要看到IBM工作時期的技術(shù)積累和國外初創(chuàng)公司的經(jīng)驗總結(jié)?

敬請關(guān)注:

瑋哥的博客 —— CSDN的傳送門

瑋哥的博客 —— 簡書的傳送門

瑋哥的博客 —— 博客園的傳送門

瑋哥的博客 —— 51Testing的傳送門

轉(zhuǎn)載于:https://www.cnblogs.com/vigorz/p/10501927.html

總結(jié)

以上是生活随笔為你收集整理的设计模式之控制反转和依赖注入的使用小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。