抽象工廠模式只是部分滿足了DIP,因爲它未滿足“高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象”,換言之在相關高層模塊還有抽象工廠的存在,就是依然存在耦合。解耦是最終目的,但實際情況是不可能消除耦合。但IoC or DI 這個思想借鑑了硬件設計,將耦合轉移了從而變相的講模塊之間的耦合消除了,將模塊之間的耦合轉移到了模塊與容器之間。從而IoC or DI完全滿足了DIP
依賴注入(DI)和工廠模式相似的原因是,它們是軟件結構控制反轉(IoC)的兩種實現。簡單地說,它們是針對同一問題的兩種解決方案。
因此,Factory模式和DI之間的主要區別是如何獲取對象引用。
依賴注入的名稱暗示該引用已注入或提供給您的代碼。使用Factory模式,你的代碼必須請求引用,以便你的代碼訪存該對象。兩種實現都刪除或分離了代碼與代碼所使用的對象引用的基礎類或類型之間的鏈接。
值得注意的是,工廠模式(或者實際上是抽象工廠模式,它們是返回新工廠並返回對象引用的工廠)可以編寫爲在運行時動態選擇或鏈接到所請求對象的類型或類。這使它們與IoC的另一種實現的Service Locator模式非常相似(甚至比DI更是如此)。
工廠設計模式(在軟件方面)非常古老,已經存在了一段時間。自從最近架構模式IoC流行以來,它正在復甦。
IoC設計模式:注入器正在注入,定位器正在定位,工廠已經重構。