[英]What is difference between using singleton class and class with static methods?
[英]What is the difference between Enum and a singleton class
我發現 Enum 和 Singleton 類之間的區別很少,但並不完全相信 Enum 是否可以代替 Singleton 使用。
如果可以使用,那么定義單例類有什么必要呢?
枚舉可確保您擁有一組預定義的實例,並且無法創建更多實例。
單例確保您只有一個實例。
從這個意義上說,您可以將 Singleton 描繪為只有一個元素的枚舉。
但是枚舉和單例(或一般的類)之間存在更多差異(技術和設計角度)。
正如您問為什么甚至使用單例而不是枚舉:一個原因可能是單例可以“延遲加載”,而枚舉則不能。
枚舉: Java 中的枚舉是一種包含一組固定常量的數據類型。 Java 枚舉常量是靜態的,並且是隱式的。 它從 JDK 1.5 開始可用。 要創建枚舉,請使用 enum 關鍵字(而不是類或接口),並用逗號分隔常量。 枚舉聲明可以在類外部或類內部完成,但不能在方法內部完成。
根據Java命名約定,建議我們將常量命名為全大寫
// A simple enum example where enum is declared
// outside any class (Note enum keyword instead of
// class keyword)
enum Color
{
RED, GREEN, BLUE;
}
public class Test
{
// Driver method
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
////////////////////////////////////////////////// ///////////////
SingletonClass:在面向對象編程中,單例類是一次只能有一個對象(類的一個實例)的類。 第一次之后,如果我們嘗試實例化 Singleton 類,新變量也指向創建的第一個實例。
public class Singleton {
private static Singleton singleton = new Singleton( );
/* A private Constructor prevents any other
* class from instantiating.
*/
private Singleton() { }
/* Static 'instance' method */
public static Singleton getInstance( ) {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod( ) {
System.out.println("demoMethod for singleton");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.