單例類問題

2021-09-01 19:40:55 字數 834 閱讀 9320

有人在

iteye

上提出了單例類的問題,下面是乙個精彩的回答。

寫乙個單例應該需要考慮乙個重要問題,物件是怎麼建立的:

1、通過建構函式建立

2、通過反射建立

3、通過反序列化建立

4、通過

clone

建立提供的解決方案如下:

1、禁止外部呼叫建構函式

設定private

2、禁止反射設定建構函式建立

accessable

,呼叫建構函式,可以再建構函式內判斷是否已經建立過物件

3、禁止反序列化建立物件,需要重寫

readresolve方法4

、禁止clone

,其實也不算禁止吧,重新

clone

,返回你的引用就

ok 你看看你的單例

有沒有處理這幾種情況,關於

synchronized

,個人還是覺得需要使用,考慮到執行緒安全問題

單例類的序列化

乙個單例類要想序列化,僅讓其實現

serializable

是不夠的,還需要寫

private object readresolve() throws objectstreamexception //

這個方法可以在反序列化之後記憶體中不會有該類的多個例項

如下,進行序列化

/反序列化

public static void main(string args) throws exception //

如果不加

readresolved

方法,兩個結果不相等,加上,則相等。

單例類模板

需求的提出 在架構設計時,某些類在整個系統生命期中最多只能有乙個物件存在 single instance 問題 如何定義乙個類,使得這個類最多只能建立乙個物件?要控制類的物件數目,必須對外隱藏建構函式。思路如下 程式設計實驗 單例模式初探 include include using namespac...

單例類模板

單例模式 需求的提出 在架構設計時,某些類在整個系統生命週期中最多只能有乙個物件存在 single instance 如何定義乙個類,使得這個類最多只能建立乙個物件?明確建立乙個物件,必然會呼叫建構函式。要控制類的物件數目,必須對外隱藏建構函式 思路 將建構函式的訪問屬性設定為private 定義i...

單例類模板

單例模式 類在系統生命週期中只有乙個物件存在 思路 將建構函式設為私有。建立乙個標記,用於指示物件的個數,多於乙個返回已經建立了的物件,少於乙個則建立乙個。單例類模板的實現 include include using namespace std class sobject public static...