避免 Singleton 的多个实例? [复制]
Posted
技术标签:
【中文标题】避免 Singleton 的多个实例? [复制]【英文标题】:Avoid multiple instances of Singleton? [duplicate] 【发布时间】:2014-08-11 16:30:57 【问题描述】:我相信,当一个单例对象被序列化,然后在多次连续反序列化时,就会创建多个单例实例。
如何避免这种情况?
【问题讨论】:
这里的“scala”标签有什么意义? 【参考方案1】:通常,当您创建一个 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 就可以完成所有工作。
【讨论】:
最好将类 final 和构造函数设为私有,这样任何人都无法创建允许创建其他 Singleton 类型的对象的子类。 @Arkanon 谢谢!我做了更改。 另外,Singletoninstance
应该是静态的。
@TyMarc - 很好的解释+答案,谢谢!
我认为这个答案不能解决序列化/反序列化问题【参考方案2】:
Joshua Bloch 在Effective Java 中谈到了使用枚举作为单例来避免这个特定问题。查看这篇文章:Why Enums are Better Singletons - 或 - 直接从 Bloch here 阅读。
【讨论】:
+1 来自我。很好的参考/链接。 枚举需要更多内存,见youtube.com/watch?v=Hzs6OBcvNQE 那个视频是安卓专用的,就是2K和4K字节的区别…………以上是关于避免 Singleton 的多个实例? [复制]的主要内容,如果未能解决你的问题,请参考以下文章