【问题标题】:Avoid multiple instances of Singleton? [duplicate]避免 Singleton 的多个实例? [复制]
【发布时间】:2014-08-11 16:30:57
【问题描述】:

我相信,当一个单例对象被序列化,然后在多次连续反序列化时,就会创建多个单例实例。

如何避免这种情况?

【问题讨论】:

  • 这里的“scala”标签有什么意义?

标签: java scala design-patterns singleton


【解决方案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 谢谢!我做了更改。
  • 另外,Singleton instance 应该是静态的。
  • @TyMarc - 很好的解释+答案,谢谢!
  • 我认为这个答案不能解决序列化/反序列化问题
【解决方案2】:

Joshua Bloch 在Effective Java 中谈到了使用枚举作为单例来避免这个特定问题。查看这篇文章:Why Enums are Better Singletons - 或 - 直接从 Bloch here 阅读。

【讨论】:

  • +1 来自我。很好的参考/链接。
  • 枚举需要更多内存,见youtube.com/watch?v=Hzs6OBcvNQE
  • 那个视频是安卓专用的,就是2K和4K字节的区别…………
猜你喜欢
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多