2012-05-10 42 views
3

我用枚舉的方式實現一個Singleton:枚舉或類?

public enum Singleton { 
    INSTANCE; 

    public void doStuff(String stuff) { 
     System.out.println("Doing " + stuff); 
    } 
} 

如何調用它的權利(我不是指執行,只是如何它)?它仍然是一個類或現在是一個枚舉?我只是對理論部分感興趣。
如果談論面向對象和類,我可以說我創建了一個枚舉類型的單例類?

回答

3

在Java中的枚舉就是一個類(如你似乎知道),所以你應該很好地稱它爲上述任何一種。這有點主觀,但我認爲這取決於你想突出哪些方面。

  • ,如果你想突出它的這個東西可以實例與國家和方法的對象,稱之爲類
  • ,如果你想突出對象本身,把它稱爲單一實例
  • 如果你想強調它使用enum來實現單例模式,如果你想突出顯示它是一個單例(沒有指出如何實現這個模式),將它稱爲枚舉
  • ,稱之爲單例
  • 如果你想突出顯示這是一個單身的事實伊頓模式通過枚舉實現,稱之爲單例枚舉

我會理解這些條款中的任何一個,並且我不會判斷某人使用一個vs另一個。

2

這是一個枚舉,它也是一個類。枚舉是一種類。

0

在這種情況下,您已經創建了一個單例對象INSTANCE,它是一個枚舉(本例中爲INSTANCE)。 jvm確保只有一個枚舉實例存在;因此默認情況下它們可以被視爲單例。你可以找到更多的細節here

0

這是一個枚舉。 java語言確保INSTANCE枚舉值將被實例化(每個類加載器,因此通常每個JVM一次),並且Singleton.INSTANCE字段將允許您訪問單個實例。

你也可以只做到:

public class Singleton { 
    public static Singleton instance INSTANCE = new Singleton(); 

    private Singleton() { /* private ctor so people can't instantiate their own */ } 
} 

但枚舉方法使得清潔劑(如果你有JDK5或以上)

0
Java programming language enum types are much more powerful than their 
counterparts in other languages. The enum declaration defines a class 
(called an enum type). 
The enum class body can include methods and other fields. The compiler 
automatically adds some special methods when it creates an enum. 
+0

你至少可以[註明來源(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)如果你引用它逐字.. 。 – yshavit

0

它是Enum,它也是自Java5.0以來的一類類。

您正在用Enum創建Singleton。

瞭解Enum