2013-12-10 83 views
0

在我的Java學習之旅,我碰到代碼來了,是被標記有以下幾點:沒有必要延遲初始化,因爲類沒有狀態

/** 
* Singleton instance - no need to lazy init as the class holds no state. 
*/ 
public static final SuperParentMarshaller instance = new SuperParentMarshaller(); 

這是什麼意思?這是什麼類?這是目的?

預先感謝您。

+0

的可能的複製http://stackoverflow.com/questions/3192095/where-exactly-the-singleton-pattern-is-used-in-real-應用程序 –

+0

你問什麼是單身人士嗎?還是你問懶惰和渴望初始化之間的區別?你應該能夠找到堆棧溢出這兩個問題的答案。 –

+0

我不明白上面陳述背後的邏輯是什麼以及如何使用它。在類SuperParentMarshaller中,有一個變量被初始化爲'public static final SuperParentMarshaller instance = new SuperParentMarshaller();'這有助於什麼?我真的想了解爲什麼可以用這種方式編碼的目的。 –

回答

1

這是渴望初始化你所提到的情況。該對象在對該對象的請求之前已經被初始化。使其懶惰意味着對象將在第一次調用時初始化。這是一種單一的設計模式。在整個應用程序中將只有這個類的一個對象。

// eager loading of INSTANCE  
public class Singleton 
{ 
//initailzed during class loading 
private static final Singleton INSTANCE = new Singleton(); 

//to prevent creating another instance of Singleton 
private Singleton(){} 

public static Singleton getSingleton(){ 
    return INSTANCE; 
} 
} 

延遲初始化:

// lazy initialization 
public class Singleton 
{ 
//initailzed during class loading 
private static final Singleton INSTANCE; 

//to prevent creating another instance of Singleton 
private Singleton(){} 

public static Singleton getSingleton(){ 
    // object will be initialized on it's first call. 
    if(INSTANCE == null) 
     INSTANCE = new Singleton(); 
    return INSTANCE; 
} 
} 
+0

謝謝阿米特。很好的解釋。 –

0

單例是爲了確保在應用程序中存在一個,並且只有一個該對象的實例。例如,當確保只有一個音頻類實例時,它可以派上用場,因此不會有兩個實例要求音頻設備播放兩個不同的東西。

儘管在實踐中,單身人士並沒有太多的使用,但如果你遇到過單身人士,那麼知道它存在就很方便。

初始化方法比用於確保只能創建一個實例。有幾種方法可以確保這一點,如果您不保護實例被創建不止一次,則2個線程可以同時進入該類,並且最終可以獲得該類的兩個實例。這會違揹你想要達到的目標。

看看這個:http://en.wikipedia.org/wiki/Singleton_pattern