2012-01-23 78 views
0

我們正在開發一個應用程序來處理各種XML消息並將它們加載到數據存儲中。我正在使用的一個開發人員使用反射創建了一個Singleton工廠,以創建適當的消息子類的實例。我的問題是圍繞使用工廠單例...(使用相同的東西來構建SqlCommand對象需要傳遞給DB)。在這裏工廠肯定是有道理的,我對模擬使用Singleton與Factory相結合的部分很感興趣。Singleton Factory解析消息

我已經閱讀了很多貼子,stackoverlow響應等,它仍然不清楚爲什麼在這種情況下,我們會使用該模式(Singleton與工廠...我會假設只使用工廠模式? )。

只是爲了更好地理解我收集的內容,當想要確保只有一個接口時,您想使用Singleton

+3

立即停止並閱讀[DI容器](http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx)。研究理論和實踐。瞭解生命週期管理和構造器注入。這些將消除Singleton,允許您編寫鬆散耦合且可測試的代碼,並且可以消除對工廠的需求。 – TrueWill

+0

我會看看@TrueWill – scarpacci

回答

1

單身人士不確保一個單一的界面;它們確保一個對象的單個實例可以被其他對象全局訪問。您可能希望使用單例的一個示例是,您需要可在應用程序中的任何位置訪問的計數器。換句話說,該單個對象的狀態在整個應用程序生命週期中保持不變。

另一方面,工廠用於創建對象,您不必知道返回的類的確切類型。例如,您可能有一個返回汽車物體的工廠,但返回的確切類可能是大衆汽車,也可能是法拉利。

工廠用於依賴注入(DI)。因此,在您給出的示例中,您可以使用工廠來返回與數據庫接口的對象,但實際的類可能會使用SQL語句與數據庫進行交互,也可能是另一個使用對象關係映射(ORM)框架的類。這將實際的數據庫接口/實現從應用程序的其餘部分中分離出來,並允許將更改數據庫訪問的更多靈活性。工廠甚至可以返回可用於單元測試的數據庫訪問模型。 DI可用於更改運行時使用的方法。出於這些原因,我肯定會推薦使用工廠。

工廠也可以返回單身人士。因此,在確定您是否需要單例時要問的問題是,是否需要在應用程序中爲所有將訪問此對象的對象維護狀態。想要維護狀態的一個示例是,您希望在應用程序的整個生命週期中,爲任何訪問此DB對象的對象保持連接對數據庫的開放。不建議你這樣做,但它只是爲什麼你可能希望在應用程序的整個生命週期中維護該對象的狀態信息的一個例子。