有人在
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...