2011-05-11 368 views
2

所以我剛鑽入Singleton類,是的,我覺得他們很有幫助。我使用我的單身主要用於多個目標(視圖,表等)的數據存儲。話雖如此,我已經可以看到自己將在我的項目中實現很多單身人士。單身人士的後果

但是,很多單身人士會產生負面影響嗎?從我讀過的關於單身人士的事情可以看出,你爲一個過程中的每個人創建了一個實例。其他類實例會從內存中釋放(假設它們已正確釋放),那麼是否應該釋放單例呢?

所以把它縮小到一個問題:有很多單身人士是否有害?

回答

1

單身人士沒有規模。不管你想要什麼認爲應該是一個單身人士,當你的系統變大時,事實證明你需要不止一個。

如果你永遠不需要超過一個,單身是好的。但是,隨着系統規模的擴大,您通常需要在其自己的上下文中使用不止一個。

單身漢只是另一種說「全球」的方式。這並不壞,但一般來說,對於複雜性不斷變化和增長的系統來說,這並不是一個好主意。

+0

嗯,我明白了你的觀點。讓我回答我自己的問題,謝謝你的評論! – 2011-05-11 20:58:42

1

從GOF的書:

的Singleton模式有幾個好處:

  1. 受控訪問的唯一實例。因爲Singleton類封裝了它的唯一實例,所以它可以嚴格控制客戶端訪問它的方式。

  2. 縮小名稱空間。 Singleton模式是對全局變量的改進。它避免了使用存儲唯一實例的全局變量 污染名稱空間。

  3. 許可改進操作和表示。 Singleton類可以被分類,並且使用這個擴展類的實例很容易配置一個應用程序 。您可以在運行時使用您需要的類的實例來配置 應用程序。

  4. 允許可變數量的實例。該模式使您可以輕鬆改變主意並允許Singleton的多個實例。此外,您可以使用相同的方法來控制應用程序使用的實例的編號 。只有授予 訪問Singleton實例的操作需要更改。

  5. 比班級操作更靈活。另一種打包單例功能的方法是使用Singleton類可以被分類爲 。類操作(即,C++ 中的靜態成員函數或Smalltalk中的類方法)。但是這兩種語言技巧使得很難將設計改變爲允許多於一個實例的實例 。而且,C++中的靜態成員函數永遠不會是虛擬的,所以子類不能以多態方式覆蓋它們。