對控制反轉的理解

1.        起源

馬丁·富勒:哪些方面的控制被反轉了?

馬丁·富勒:依賴對象的獲得被反轉了。

 

2.        什麼是反轉

依賴對象:大多數應用程序都是由兩個或是更多的類通過彼此的合作來實現業務邏輯,這使得每個對象都需要與其合作的對象的引用。例如Class A中用到了Class B的對象b,一般情況下,需要在A的代碼中顯式的new一個B的對象。而是用控制反轉,則A的代碼只需要定義一個私有的B對象,不需要直接new來獲得這個對象,而是通過相關的容器控制程序來將B對象在外部new出來並注入到A類裏的引用中。而具體獲取的方法、對象被獲取時的狀態由配置文件(如XML)來指定。

 

3.        怎麼反轉?

實現控制反轉主要有兩種方式:依賴注入和依賴查找。兩者的區別在於,前者是被動的接收對象,在類A的實例創建過程中即創建了依賴的B對象,通過類型或名稱來判斷將不同的對象注入到不同的數屬性中,而後者是主動索取響應名稱的對象,獲得依賴對象的時間也可以在代碼中自由控制。

依賴注入:

基於接口。實現特定接口以供外部容器注入所依賴類型的對象。

基於 set 方法。實現特定屬性的publicset方法,來讓外部容器調用傳入所依賴類型的對象。

基於構造函數。實現特定參數的構造函數,在新建對象時傳入所依賴類型的對象。

依賴查找:在需要的時候通過調用框架提供的方法來獲取對象,獲取時需要提供相關的配置文件路徑、key等信息來確定獲取對象的狀態

 

4.        爲什麼反轉?

如果這個獲取過程要靠自身實現,那麼這將導致代碼高度耦合並且難以維護和調試。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章