在我的Java學習之旅,我碰到代碼來了,是被標記有以下幾點:沒有必要延遲初始化,因爲類沒有狀態
/**
* Singleton instance - no need to lazy init as the class holds no state.
*/
public static final SuperParentMarshaller instance = new SuperParentMarshaller();
這是什麼意思?這是什麼類?這是目的?
預先感謝您。
在我的Java學習之旅,我碰到代碼來了,是被標記有以下幾點:沒有必要延遲初始化,因爲類沒有狀態
/**
* Singleton instance - no need to lazy init as the class holds no state.
*/
public static final SuperParentMarshaller instance = new SuperParentMarshaller();
這是什麼意思?這是什麼類?這是目的?
預先感謝您。
這是渴望初始化你所提到的情況。該對象在對該對象的請求之前已經被初始化。使其懶惰意味着對象將在第一次調用時初始化。這是一種單一的設計模式。在整個應用程序中將只有這個類的一個對象。
// 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;
}
}
謝謝阿米特。很好的解釋。 –
單例是爲了確保在應用程序中存在一個,並且只有一個該對象的實例。例如,當確保只有一個音頻類實例時,它可以派上用場,因此不會有兩個實例要求音頻設備播放兩個不同的東西。
儘管在實踐中,單身人士並沒有太多的使用,但如果你遇到過單身人士,那麼知道它存在就很方便。
初始化方法比用於確保只能創建一個實例。有幾種方法可以確保這一點,如果您不保護實例被創建不止一次,則2個線程可以同時進入該類,並且最終可以獲得該類的兩個實例。這會違揹你想要達到的目標。
的可能的複製http://stackoverflow.com/questions/3192095/where-exactly-the-singleton-pattern-is-used-in-real-應用程序 –
你問什麼是單身人士嗎?還是你問懶惰和渴望初始化之間的區別?你應該能夠找到堆棧溢出這兩個問題的答案。 –
我不明白上面陳述背後的邏輯是什麼以及如何使用它。在類SuperParentMarshaller中,有一個變量被初始化爲'public static final SuperParentMarshaller instance = new SuperParentMarshaller();'這有助於什麼?我真的想了解爲什麼可以用這種方式編碼的目的。 –