【发布时间】:2014-08-11 16:30:57
【问题描述】:
我相信,当一个单例对象被序列化,然后在多次连续反序列化时,就会创建多个单例实例。
如何避免这种情况?
【问题讨论】:
-
这里的“scala”标签有什么意义?
标签: java scala design-patterns singleton
我相信,当一个单例对象被序列化,然后在多次连续反序列化时,就会创建多个单例实例。
如何避免这种情况?
【问题讨论】:
标签: java scala design-patterns singleton
通常,当您创建一个 Singleton 时,您要确保它只有一个实例。你可以这样做:
public static class Singleton{
private final static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null)
instance = new Singleton();
return instance;
}
}
将构造函数放入private 确保除了这个类之外没有人可以创建Singleton 的实例。
您只需要使用 getInstance 调用 Singleton,Singleton 就可以完成所有工作。
【讨论】:
instance 应该是静态的。
Joshua Bloch 在Effective Java 中谈到了使用枚举作为单例来避免这个特定问题。查看这篇文章:Why Enums are Better Singletons - 或 - 直接从 Bloch here 阅读。
【讨论】: