Spring — IoC詳解

IoC概念

       控制反轉(Inversion of Control)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題。 它還有一個名字叫做依賴注入(Dependency Injection)。IoC不是什麼技術,它是一種設計模式。


實例演示

       爲了更好的說明IoC,我爲大家舉一個簡單的例子,如有這樣一個描述:某公司新成立了一個項目組,項目組有若干成員和一個項目組長,項目組成立後第一次開會上,作爲項目組長的小李按照慣例首先做了簡短的自我介紹。


       根據上述的描述,如果我們寫出如下代碼和類圖:

[java] view plain copy
 print?
  1. public class Li {     
  2.     public void introduce() {  
  3.         System.out.println("大家好,我是小李");  
  4.     }  
  5. }  
  6. public class Team {  
  7.     public void firstMeeting() {  
  8.         Li li = new Li();  
  9.         li.introduce();  
  10.     }  
  11. }  


      具體類圖如下:


       上述的代碼,應該說基本完成了相關的需求,但是仔細考慮之後就會發現,上述的代碼是根據具體的場景描述進行的,並沒有進行抽象,這樣就導致我們不能靈活的安排項目組長去做開場,即根據現在的代碼,開場自我介紹被綁定給了小李而不能安排給其他人。爲了解決上述的問題,我們引入首先引入Leader接口,相關代碼和類圖如下:

[java] view plain copy
 print?
  1. public interface Leader {  
  2.     public void introduce();  
  3. }  
  4.   
  5. public class Li implements Leader {  
  6.     @Override  
  7.     public void introduce() {  
  8.         System.out.println("大家好,我是小李");  
  9.     }  
  10. }  
  11.   
  12. public class Team {  
  13.     public void firstMeeting() {  
  14.         Leader li = new Li();  
  15.         li.introduce();  
  16.     }  
  17. }  
     

       具體類圖如下:


       雖然上述的代碼可以讓我們安排給其他成員開場,但是我們可以看出Team類同時依賴Leader接口和Li類,並沒有達到我們所期望的Team僅僅依賴於Leader接口的目的,如何解決這個問題呢?當然是引入Boss,由Boss決定具體由誰擔任項目組長。具體類圖和代碼如下:

[java] view plain copy
 print?
  1. public interface Leader {  
  2.     public void introduce();  
  3. }  
  4.   
  5. public class Li implements Leader {  
  6.     @Override  
  7.     public void introduce() {  
  8.         System.out.println("大家好,我是小李");  
  9.     }  
  10. }  
  11.   
  12. public class Team {  
  13.     public void firstMetting(Leader leader){  
  14.         leader.introduce();  
  15.     }  
  16. }  
  17.   
  18. public class Boss {  
  19.     public void direct(){  
  20.         Leader leader = new Li();  
  21.         Team team = new Team();  
  22.         team.firstMetting(leader);  
  23.     }  
  24. }  

     

       具體類圖如下:


        通過以上代碼和圖示,我們可以看出,通過引入老闆類,我們將項目小組和具體由誰擔任項目組長進行解耦

       對應上述例子,我們再來講解一下IoC,IoC從字面上看分爲控制和反轉,控制在上面的實例中就是具體由誰擔任項目組長,而反轉就是將決定誰擔任項目組長轉移到Boss類中。通俗理解就是將接口的具體實現類(Li)的控制權從調用類(Team)中分離轉交給第三方(Boss)決定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章