枚举和单例类有啥区别[重复]
Posted
技术标签:
【中文标题】枚举和单例类有啥区别[重复]【英文标题】:What is the difference between Enum and a singleton class [duplicate]枚举和单例类有什么区别[重复] 【发布时间】:2018-09-25 06:46:05 【问题描述】:我发现 Enum 和 Singleton 类之间几乎没有区别,但不完全相信 Enum 是否可以用来代替 Singleton。
如果它可以使用,那么定义单例类需要什么?
【问题讨论】:
在提问之前寻找类似的问题。这个问题经常被问到。 我已经提到“我发现很少有区别”。但不相信..请把链接发给我 我什至不明白为什么有人会混合使用这两个术语。他们在那里有两个完全不同的原因和场景。 enum 定义了一组 constants。 singleton 是一种在您想确保某人只能创建您的类的一个实例时使用的技术。 枚举也可以创建单个实例 【参考方案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");
【讨论】:
以上是关于枚举和单例类有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin中数据类和单例类的实现和讲解面向对象编程接口的实现