簡體   English   中英

枚舉和單例類有什么區別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM