看標題覺得很牛逼, 等我講完你就理解了, 面向對象中很簡單的東西。
控制反轉也叫l(wèi)oC, 全稱Inverse of Control媒峡。
控制反轉包括依賴注入(DI)和依賴查找(DL), 但我們大多數情況都認為loC就是DI卖毁。全稱分別為: Dependency Injection和Dependency Lookup。
loC原理也叫做
依賴倒置原理
, 全稱Dependency Inversion Principle。這里必須說明一下, loC是一種全新的設計模式勉耀。但Gof的23種設計模式中并沒有l(wèi)oC是因為控制反轉思想成熟較晚盼铁。
JAVA體系中Spring框架的核心就是依賴注入, 其他語言的各種框架也都會用到這種設計模式粗蔚。
A類用于查詢數據庫記錄, B類用于連接數據庫, 也就是說A依賴于B, 現在我們怎么在A類中書寫查詢方法呢?
(為什么不在A中連接數據庫饶火?如果你有一百個A, 你連接一百次, new一百個對象實例出來嗎鹏控?這是需要內存和IO開銷的!B類只負責數據庫鏈接, 還要封裝工廠單例適配器模式, 內容并不少哦)
單一功能原則是面向對象的基本原則之一, 也是GOF中設計模式的基本原則之一肤寝。全稱single responsibility principle当辐。
我們的A類實體控制內部所有資源對象, 我們在其參數上將B類的引用寫上(注入, 類的引用即類的實例化對象), A的內部就可以使用B中的方法, 這就是依賴注入。
也就是說, 控制反轉是鲤看,關于一個對象如何獲取他所依賴的對象的引用, 這個責任的反轉缘揪。這個對象不局限于我上面寫的類, 如果是A函數注入B函數, 其實就類似于回調了。
什么叫責任的反轉刨摩?一開始是A對象在內部程序代碼中實例化B, 實例化這個操作的責任在內部; 依賴注入后我都在自己的內部當你實例化了, 真正的實例化操作由容器負責, 容器的參數注入實例化對象, 這就是責任反轉寺晌。
依賴注入主要是用來解開對象之間的緊密耦合關系, 解耦是面向對象的基本原則之一。
面向對象不得不提接口(Interface), 接口是必須被實現的, new一個接口A的一瞬間, A接口和實現A接口的B類之間, 依賴(耦合)關系就產生了澡刹。
A與B之間有依賴關系呻征。如果想使用接口A的另外一個實現就需要更改代碼了。當然我們可以建立一個Factory工廠類來根據條件生成想要的A接口的的具體實現, 這里不解釋工廠模式了罢浇。
工廠模式確實看起來有點用, 但實際上對耦合狀態(tài)并沒有改變,因為這只是在工廠中加判斷語句做分流處理陆赋。loC則是將依賴問題交給實現類, 可以用于徹底解決依賴問題沐祷。
在JAVA體系中, loC是依賴于
反射
編程的, 反射就是根據類名來生成對象。反射這種操作比直接new生成對象的效率要低很多, 但是提高了系統的可維護性和靈活性攒岛。對于某些生成要求高的對象不聯系使用loC赖临。JAVA中使用loC反射編程, IDE不方便自動查找重構, 必須開發(fā)者手動修改XML配置文件。
JAVA中的loC容器: Pico Container灾锯、Avalon 兢榨、Spring、JBoss顺饮、HiveMind吵聪、EJB等。php中的loC容器可以是任何一個函數或者接口的實現類兼雄。
不知道各位能理解多少, 整理一下自己的學習筆記吟逝。
控制反轉和依賴注入
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹅巍,“玉大人,你說我怎么就攤上這事料祠÷媾酰” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵髓绽,是天一觀的道長敛苇。 經常有香客問我,道長顺呕,這世上最難降的妖魔是什么枫攀? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮株茶,結果婚禮上来涨,老公的妹妹穿的比我還像新娘。我一直安慰自己启盛,他們只是感情好蹦掐,可當我...
- 文/花漫 我一把揭開白布技羔。 她就那樣靜靜地躺著,像睡著了一般卧抗。 火紅的嫁衣襯著肌膚如雪藤滥。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼谨娜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磺陡?” 一聲冷哼從身側響起趴梢,我...
- 正文 年R本政府宣布晃财,位于F島的核電站叨橱,受9級特大地震影響,放射性物質發(fā)生泄漏断盛。R本人自食惡果不足惜罗洗,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钢猛。 院中可真熱鬧伙菜,春花似錦、人聲如沸厢洞。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丧叽,卻和暖如春卫玖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踊淳。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 轉載鏈接:http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/#h...
- 依賴倒置?控制反轉?依賴注入?面向接口編程 那些年,空氣中仿佛還能聞到漢唐盛世的余韻溉躲,因此你決不允許自己的臉上有油...
- 說明:該文章轉自^知乎 作者:"在好" 那些年榜田,空氣中仿佛還能聞到漢唐盛世的余韻,因此你決不允許自己的臉上有油光锻梳,...
- Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理箭券,服務發(fā)現,斷路器疑枯,智...
- 小劉看見手表辩块,感覺很興奮,說荆永,“師傅废亭,這就是證據啊屁魏!這估計十有八九是有人被綁架了吧滔以?!氓拼!”小劉說完就掏掏兜想找什么...