我发现Enum和Singleton类之间没有什么区别,但并不完全确定是否可以使用Enum代替Singleton。
如果可以使用,那么定义单例类的需要是什么?
答案 0 :(得分:3)
枚举确保您拥有预定义的实例,并且不能创建更多实例。
单身人士可确保您拥有仅一个实例。
从这个意义上讲,你可以将Singleton描绘成一个只有一个元素的枚举。
但是在枚举和单身人士(或一般的课程)之间存在更多的差异(技术和设计观点)。
正如你在问为什么甚至使用Singleton而不是enum:一个原因可能是Singletons可以加载'懒惰加载',而枚举不能。
答案 1 :(得分:0)
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
}
}