单例模式中枚举的优点

时间:2014-09-11 06:41:15

标签: java class enums singleton

我最近才知道enum是一种更有效的方法来实现单身人士。

单身enum

public enum Singleton{
INSTANCE;
    public void doStuff(){
        //......
    }
    public void doMoreStuff(){
        //......
    }
}

单身class

public class Singleton{
    private static final INSTANCE = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return INSTANCE;
    }

    public void doStuff(){
        //......
    }
    public void doMoreStuff(){
        //......
    }
}

问题:使用enum over class实现单例可能有什么优缺点?

2 个答案:

答案 0 :(得分:1)

作为explained by Joshua Bloch,如果您的单例不可序列化,则这两种方法在功能上是相同的。虽然您可能希望将代码添加到私有Singleton构造函数中,以防止反射被用于创建第二个实例。

如果您的单例是可序列化的,那么枚举方法将免费提供所有必要的管道,而使用静态字段方法,您必须自己添加。

在我看来,采用枚举方法没有任何缺点。

答案 1 :(得分:0)

我相信枚举是创建单例的最佳方法。如果您正在寻找不利之处

  1. 不可能对枚举有延迟加载
  2. 如果序列化和反序列化枚举,则枚举中的成员将重置为默认值。
  3. 如果您改变主意并希望使其不成为单身人士,则通过双重检查同步单身人士很容易。