繁体   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