2011-08-23 29 views
5

我有一個應用程序,其中有一些類可以處理某些特定的功能,具有與應用程序本身相同的生命週期,並且用於程序的許多部分。由於最後一個原因,我稱他們爲服務。例如,音頻服務播放音頻文件並執行與音頻相關的許多其他事情。服務的單例/靜態類

Theese類在應用程序啓動時僅實例化一次,並且每種類型都有多個類沒有意義。

因爲我已經閱讀了很多關於單身人士的回答,因爲他們的使用方式令人沮喪,我繼續在需要的時候傳遞一些關於服務的服務。 隨着項目的不斷增長,我發現自己有許多需要在構造函數中引用服務的類,在某些情況下,甚至爲這些服務設置了外觀,以避免添加所有服務引用。

我想我做錯了。我認爲這應該是一個很好的用於靜態/單例類。

這是一個正確的方法嗎?

回答

1

我看到一個答案建議介紹Spring。在封面之下,Spring仍然在需要的地方傳遞該參考。

與其嚮應用程序中引入新框架,爲什麼不使用Singleton呢?如果它完成了這項工作,並且比傳遞服務參考更容易維護,我說使用它。

如果您對Singletons的擔憂是因爲它們對可測試性的影響,請使用Dependency Injection(該模式,而不是框架)來減少與實現的耦合。

2

看起來你需要一個具有自動裝配能力的依賴注入容器。如果您使用的是Java,請考慮Spring。

0

單例實際上代表的只是應用程序生命週期中僅應創建一次的對象。這些對象實際上包含一些固定設置。比方說,你有一個解析器類只用於解析html。 HTML的根目錄應該是「」標記。此外,您不希望從此解析器類創建大量實例,因爲每個類的實例都會執行相同的操作。實例會得到一串html,並且會返回X. 如果您認爲您的課程一次只能完成一件事,那麼您可以選擇單身。但是,如果你這樣說,例如,你的音頻服務應該一次播放不同的音頻,我認爲創建一個類的實例比單獨實現要好。

0

我同意MikeG。使用單身。既然你說這些類主要是面向服務的,我不會期望它會導致任何問題。