2011-12-01 43 views
3

在一個龐大複雜的程序中,可能不容易發現單個實例化的代碼在 的哪個位置。跟蹤創建的單例實例以便重用它們的最佳方法是什麼?如何找到創建Java單例實例的位置?

問候, RR

+0

你想知道哪個調用實例化單例(假設懶惰實例化)?如果是這樣,您可以修改單例以在調用構造函數時存儲/記錄堆棧跟蹤。 –

回答

6

A Singleton通常有一個私有的構造函數,因此Singleton類是唯一可以實例化唯一的單例實例的類。

+0

e編輯。請閱讀 – recoInrelax

+0

@recolnrelax您可以請添加一個片段,顯示您實際上做了什麼。 (我不明白該部分'分配給該單身人士的變量) – stacker

+0

我沒有讀它的權利。 「Singleton類是唯一可以實例化唯一的單例實例的類」我現在明白了:p抱歉 – recoInrelax

1

這是singleton class開發者負有責任,以確保該實例被多個電話重用。

作爲用戶,您不應該擔心。

class Singelton 
{ 
    private static Singelton _singelton = null; 

    private Singelton() 
    { 

    } 

    // NOT usable for Multithreaded program 
    public static Singelton CreateMe() 
    { 
     if(_singelton == null) 
      _singelton = new Singelton(); 
     return _singelton;   
    } 
} 

現在,從你的代碼的任何地方,你可以實例Singelton,有多少次你喜歡,每次將其分配給不同的參考。但c'tor只被調用一次。

0

我會用一個enum

enum Singleton { 
    INSTANCE: 
} 

或類似的東西不能被實例化不止一次和全局訪問更多。

0

命名創建/返回單身人士的方法的一般做法是getInstance()。當你無法在創建單例的代碼中找到該位置時,我不理解這種情況,但可以搜索此方法名稱。

如果你想捕捉創建單身人士的確切時刻 - 你可以使用AOP。 AspectJ是java中的一個很好的例子。您將能夠在創建課程之前/之後執行您的代碼或調用getInstance()方法。

如果您的問題是關於重複使用創建的單身人士,然後搜索此網站。 For example