可能重複:
Advantage of Static class over use of SingletonStatic class vs. Singelton - 每個人的優點和缺點是什麼?
靜態類與Singelton - 有什麼利弊每一個&利弊?
可能重複:
Advantage of Static class over use of SingletonStatic class vs. Singelton - 每個人的優點和缺點是什麼?
靜態類與Singelton - 有什麼利弊每一個&利弊?
一個Singleton是其中只有一個實例可以被實例化,而沒有與一個靜態方法關聯的實例的類。
如果你能實現你想用一個單一的靜態方法的功能,那麼這可能是你最好的方法,因爲它更容易實現。考慮擴展方法 - 它們只是語法糖的靜態方法。如果您可以從邏輯上將靜態方法視爲對現有類的幫助,那麼使用靜態方法是有意義的。
在另一方面,如果沒有某種形式的參與,你正在努力實現的功能狀態,那麼它可能是最好使用辛格爾頓代替。 Singleton對象可以包含/管理其狀態並管理併發訪問/線程,而對於靜態類和靜態方法來說,這變得更加複雜。如果您在C#中使用Singleton,我強烈建議閱讀Jon Skeet關於正確的Singleton實現的文章,該文章可在http://www.yoda.arachsys.com/csharp/singleton.html處獲得。
辛格爾頓的是更具有可比性靜態類不是靜態方法。單身人士在這個比較中有一個很大的優勢,就是他們可以實現接口並從基類中派生出來。這使您可以將其實現與接口分離。例如,如果我在與一個Singleton實現芯組件具有一個接口IAccountService
,SingletonAspNetAccountService
在我的服務層,那麼我可以注入IAccountService
與IoC容器我的UI層,而不需要在UI我的服務層的依賴關係層。另一方面,如果我有一個靜態的Accounts
類,那麼我將不得不爲靜態類的方法創建一個適配器,或者在我的用戶界面中依賴於服務層來訪問靜態帳戶功能。
你有沒有試過使用谷歌搜索「靜態方法vs單身」? – BenCr 2011-04-05 12:43:52
這個問題的變體在SO上被問過許多次。 – spender 2011-04-05 12:49:10
你是指靜態方法(它返回唯一的實例)和單例(返回唯一實例的靜態屬性)之間的區別? – Tengiz 2011-04-05 12:50:18