在创建单例时我想到的第一件事就是枚举。我通常使用枚举来实现单例:
enum Singleton {
INSTANCE;
}
使用枚举获得的一个好处是使用序列化。
使用单例类,您必须确保序列化和反序列化不会通过实现readResolve()方法创建一个新的实例,而枚举不是这样。
使用类你应该像这样创建单例:
public final class Singleton implements Serializable {
// For lazy-laoding (if only you want)
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton() {
if (SingletonHolder.INSTANCE != null) {
// throw Some Exception
}
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
// To avoid deserialization create new instance
@SuppressWarnings("unused")
private Singleton readResolve() {
return SingletonHolder.INSTANCE;
}
}