2011-04-05 220 views
1

可能重複:
Advantage of Static class over use of SingletonStatic class vs. Singelton - 每個人的優點和缺點是什麼?

靜態類與Singelton - 有什麼利弊每一個&利弊?

+0

你有沒有試過使用谷歌搜索「靜態方法vs單身」? – BenCr 2011-04-05 12:43:52

+1

這個問題的變體在SO上被問過許多次。 – spender 2011-04-05 12:49:10

+0

你是指靜態方法(它返回唯一的實例)和單例(返回唯一實例的靜態屬性)之間的區別? – Tengiz 2011-04-05 12:50:18

回答

0

靜態方法和單例最終基本上是一回事。靜態方法的「單例實例」是類型。

這兩種應謹慎使用,並且最小化。他們在代碼中創建依賴關係,這些代碼很難被移除以進行測試。

+0

我很抱歉,但這只是錯誤的。 – BenCr 2011-04-05 12:44:37

+1

@BenCr - 爲什麼這是錯的? – 2011-04-05 12:44:58

+0

「靜態方法和單例實質上是一回事」實際上是無意義的和錯誤的,單例實例如何成爲一種類型? – BenCr 2011-04-05 12:46:41

0

一個Singleton是其中只有一個實例可以被實例化,而沒有與一個靜態方法關聯的實例的類。

如果你能實現你想用一個單一的靜態方法的功能,那麼這可能是你最好的方法,因爲它更容易實現。考慮擴展方法 - 它們只是語法糖的靜態方法。如果您可以從邏輯上將靜態方法視爲對現有類的幫助,那麼使用靜態方法是有意義的。

在另一方面,如果沒有某種形式的參與,你正在努力實現的功能狀態,那麼它可能是最好使用辛格爾頓代替。 Singleton對象可以包含/管理其狀態並管理併發訪問/線程,而對於靜態類和靜態方法來說,這變得更加複雜。如果您在C#中使用Singleton,我強烈建議閱讀Jon Skeet關於正確的Singleton實現的文章,該文章可在http://www.yoda.arachsys.com/csharp/singleton.html處獲得。

辛格爾頓的是更具有可比性靜態類不是靜態方法。單身人士在這個比較中有一個很大的優勢,就是他們可以實現接口並從基類中派生出來。這使您可以將其實現與接口分離。例如,如果我在與一個Singleton實現芯組件具有一個接口IAccountServiceSingletonAspNetAccountService在我的服務層,那麼我可以注入IAccountService與IoC容器我的UI層,而不需要在UI我的服務層的依賴關係層。另一方面,如果我有一個靜態的Accounts類,那麼我將不得不爲靜態類的方法創建一個適配器,或者在我的用戶界面中依賴於服務層來訪問靜態帳戶功能。

相關問題