当前位置:
首页 >
单身数字_完美单身
发布时间:2023/12/3
57
豆豆
单身数字
我不时遇到一些Java程序员,他们不确定他们应该如何正确实现Singleton模式。 (如果您不知道什么是Singleton,请尝试Wikipedia: Singleton模式 )。我并不是在谈论在线程环境中的正确实现。 但是,使用最常见的实现,您可以在Internet上找到所需的内容,可以轻松创建任意多个单例。
试想一下,您具有以下常见的单例实现:
public final class NonSafeSingleton implements Serializable {private static final NonSafeSingleton INSTANCE = new NonSafeSingleton();private NonSafeSingleton() {}public static NonSafeSingleton getInstance() {return INSTANCE;} }现在专注于可序列化的单词。 再想一秒钟…是的,您是对的。 如果您通过RMI发送这些东西,您将获得第二实例。 甚至需要执行一些内存序列化,反序列化和kaboom操作! 您刚刚取消了一般的Singleton合同。 那样不是很好。 但是如何解决呢? 通常,我使用两种方法:
您需要在Singleton类中实现readResolve方法。 这个小东西用来覆盖已经创建的序列化机制。 您返回的内容将代替序列化产生的数据(有关详细信息,请参见: Serializable Javadoc )。 只需在此处返回您的实例: ...protected Object readResolve() throws ObjectStreamException {return INSTANCE;} ...
将您的单例类更改为枚举,并删除私有构造函数和getInstance方法。 是的,真的就是这么简单。 那么您可以免费获得此功能。 public enum SafeSingleton implements Serializable {INSTANCE; }
在实施下一个Singleton时,请记住这一点。 如果大量使用RMI,可以使您的生活更轻松。
参考:我们的JCG合作伙伴 Marek Piechut在《 发展世界 》上的完美单身女性。
相关文章 :- Java中可怕的双重检查锁定习惯用法
- Java Secret:使用枚举构建状态机
- 依赖注入–手动方式
- Java泛型快速教程
- JVM如何处理锁
翻译自: https://www.javacodegeeks.com/2011/08/perfect-singleton.html
单身数字
总结
- 上一篇: 查看linux磁盘空间的命令(查看lin
- 下一篇: dto与dto相互转换_在DTO上