2012-05-10 40 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