2012-10-31 22 views
0

我經常設置其他程序員使用的單例類,我發現我不確定是否有首選方法來設置對這些類中方法的訪問權限。我想過這樣做的兩種方式是:設置單例是否很糟糕,以至於所有方法都是靜態方法?

public class MyClass { 
    private static MyClass instance; 

    public static void DoStuff() { 
     instance.DoStuffInstance(); 
    } 

    private void DoStuffInstance() { 
     // Stuff happens here... 
    } 
} 

,其中的用法是:MyClass.DoStuff();

或更多這樣的:

public class MyClass { 
    public static MyClass instance; 

    public void DoStuff() { 
     // Stuff happens here... 
    } 
} 

,其中的用法是:MyClass.instance.DoStuff();

個人而言,我傾向於選擇第一個選項。我發現到處都有MyClass.instance對於經驗較少的程序員來說既難看又不直觀。

有沒有什麼好的理由可以選擇其中之一?意見很好。只是好奇別人的想法。

+0

請參閱http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton-pattern-in-java 最好的方法是通過使用枚舉。 –

回答

0

我從來沒有見過用這種方式實現的Singleton。一個典型的設置可能是這樣的:

public class MyClass { 

    private static final MyClass instance = null; 

    // Private to ensure that no other instances can be allocated. 
    private MyClass() {} 

    // Not thread safe! 
    public static MyClass getInstance() { 
     if(instance == null) { 
      instance = new MyClass(); 
     } 
     return instance; 
    } 

    public void DoStuff() { 
     // Stuff happens here... 
    } 
} 

這樣,所有的通話將類似於instance.DoStuff();,你將只需要爲每個「操作」定義一個方法,而不需要一個靜態方法和那麼你的第一種方法使用的實際「實例」方法。

此外,您設置它的方式,看起來您可以在實例初始化之前調用這些靜態方法,這是一個問題。

相關問題