2015-11-12 61 views
2

你好,我想知道如何正確獲得單例實例,什麼是最佳實踐?創建singelton實例的方式有很大的不同嗎?

public class SingeltonTest { 

    private static final CounterSingelton COUNTER = CounterSingelton.getInstance(); 

    public static void main(String[] args) { 

     //Type A 
     for (int a = 0; a < 100; a++) { 
      COUNTER.increase(); 
     } 

     //Type B 
     for (int a = 0; a < 100; a++) { 
      CounterSingelton counter = CounterSingelton.getInstance(); 
      counter.increase(); 
     } 

     //Type C 
     for (int a = 0; a < 100; a++) { 
      CounterSingelton.getInstance().increase(); 
     } 
    } 
} 
+1

[在Java中實現單例模式的有效方式是什麼?](http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a- singleton-pattern-in-java) – blank

+0

其中的一個答案提到了它!不要使用靜態的Singelton,只在需要的時候才能得到它,通常得到Singeltons不會是一個「性能明智的」大事(除非我們正在討論首次獲得Singelton,因爲考慮到這個Singelton的創建過程是可能需要很長時間的繁重過程) –

回答

2

最佳做法是避免static Singletoncontextual Singleton替換它們。

static Singleton訪問的常見模式是使用static getInstance()方法。在不改變簽名的情況下,可以輕鬆更改爲工廠方法或複雜的初始化過程。

但是,如果簽名沒有改變,行爲就會發生。所以它可能需要在呼叫者站點更改代碼。

Type BType C是嚴格等價的。由於類內部狀態的變化(例如延遲加載),只有Type A可能會被破壞(將來)。

相關問題