【问题标题】:What is the difference between Enum and a singleton class [duplicate]枚举和单例类有什么区别[重复]
【发布时间】:2018-09-25 06:46:05
【问题描述】:

我发现 Enum 和 Singleton 类之间几乎没有区别,但不完全相信 Enum 是否可以用来代替 Singleton。

如果它可以使用,那么定义单例类需要什么?

【问题讨论】:

  • 在提问之前寻找类似的问题。这个问题经常被问到。
  • 我已经提到“我发现很少有区别”。但不相信..请把链接发给我
  • 我什至不明白为什么有人会混合使用这两个术语。他们在那里有两个完全不同的原因和场景。 enum 定义了一组 constantssingleton 是一种在您想确保某人只能创建您的类的一个实例时使用的技术。
  • 枚举也可以创建单个实例

标签: java design-patterns enums


【解决方案1】:

枚举确保您有一个预定义的集合实例,并且不能创建更多实例。

单例确保您只有一个实例。

从这个意义上说,您可以将 Singleton 想象成一个只有一个元素的枚举。

但枚举和单例(或一般类)之间存在更多差异(技术和设计角度)。

当您问为什么甚至使用单例而不是枚举时:一个原因可能是单例可以“延迟加载”,而枚举不能。

【讨论】:

    【解决方案2】:

    枚举: 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);
       }
    }
    

    /////////////////////////////////////// /////////////////

    单例类: 在面向对象编程中,单例类是一次只能有一个对象(类的一个实例)的类。 第一次之后,如果我们尝试实例化 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");
        }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2017-03-30
      相关资源
      最近更新 更多