?IoC模式簡介
???IoC(Inversion of Control)模式并不是什么新的東西,它是一種很普遍的概念,依賴注入(Dependency Injection)是Martin Flower對IoC模式的一種擴展的解釋[2]。IoC是一種用來解決組件(實際上也可以是簡單的Java類)之間依賴關系、配置及生命周期的設計模式,其中對組件依賴關系的處理是IoC的精華部分。IoC的實際意義就是把組件之間的依賴關系提取(反轉)出來,由容器來具體配置。這樣,各個組件之間就不存在hard-code的關聯(lián),任何組件都可以最大程度的得到重用。運用了IoC模式后我們不再需要自己管理組件之間的依賴關系,只需要聲明由容器去實現這種依賴關系。就好像把對組件之間依賴關系的控制進行了倒置,不再由組件自己來建立這種依賴關系而交給容器(例如我們后面會介紹的PicoContainer、Spring)去管理。
???我們從一個簡單的例子看起,考慮一個Button控制Lamp的例子:?
















???但是馬上發(fā)現這個設計的問題,Button類直接依賴于Lamp類,這個依賴關系意味著當Lamp類修改時,Button類會受到影響。此外,想重用Button類來控制類似與Lamp的(比如同樣具有turnOn功能的Computer)另外一個對象則是不可能的。即Button控制Lamp,并且只能控制Lamp。顯然違反了“高層模塊不應該依賴于低層模塊,兩者都應該依賴于抽象;抽象不應該依賴于具體實現,細節(jié)應該依賴于抽象” 這一原則(DIP原則)。考慮到上述問題,自然的想到應該抽象出一個接口SwitchableDevice,來消除Button對Lamp的依賴,于是設計如下:
















