Enum和单身人士之间有什么区别

时间:2018-04-15 12:24:53

标签: java design-patterns enums

我发现Enum和Singleton类之间没有什么区别,但并不完全确定是否可以使用Enum代替Singleton。

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

2 个答案:

答案 0 :(得分:3)

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

单身人士可确保您拥有仅一个实例。

从这个意义上讲,你可以将Singleton描绘成一个只有一个元素的枚举。

但是在枚举和单身人士(或一般的课程)之间存在更多的差异(技术和设计观点)。

正如你在问为什么甚至使用Singleton而不是enum:一个原因可能是Singletons可以加载'懒惰加载',而枚举不能。

答案 1 :(得分:0)

由Gang of Four定义的

Singleton模式确保一个类只有一个实例并提供对它的全局访问点。存在不同的模式实现,例如Singleton实例的初始化和延迟初始化。

这是一个实现。

public class Singleton {

    private static Singleton instance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }
}

反射可用于销毁所有上述单例实现方法,以便您可以拥有多个实例,而不是单个实例。

为了克服这种情况,专家建议使用Enum来实现Singleton设计模式,因为Java确保任何枚举值只在Java程序中实例化一次。由于Java Enum值是全局可访问的,因此单例也是如此。

public enum EnumSingleton {

    INSTANCE;

    public static void doSomething(){
        //do something
    }
}