欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

完美的单例实现(The Perfect Singleton)

发布时间:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 完美的单例实现(The Perfect Singleton) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我经常遇到一些这样的Java程序员,他们不确定应该如何恰当的实现单例模式。

我不考虑在线程的环境中合适的实现。但是使用你能在网络上找到的大多数常见的实现方式,你可以轻松地创建你想要的多种单例实现。

假设你有下面这种常见的单例的实现:

1 public final class NonSafeSingleton implements Serializable {
2     private static final NonSafeSingleton INSTANCE = new NonSafeSingleton();
3     private NonSafeSingleton() {}
4     public static NonSafeSingleton getInstance() {
5         return INSTANCE;
6     }
7}

现在,注意到Serializable 这个单词。思考一会…..你是对的。如果通过RMI发送上边的代码,你将会得到第二个实例。它应该足够可以做一些内存中的序列化和反序列化操作。你刚刚违反了单例的规则。那不是很好。但是如何修复它?通常我会用两种方式:

  • 困难的方式(如果你用4或者更老的版本)
  • 你需要在你的单例类中实现一个readResolve方法。这通常用来重写序列化机制已经创建的内容。在这个方法里返回的是用来代替来自序列化的数据。这里仅需要返回你的实例:

    1...  
    2 protected Object readResolve() throws ObjectStreamException {      
    3    return INSTANCE;  
    4}
    5...
  • 简单的方式(如果你用5或更新的版本)
  • 将你的单例类改成枚举类型,然后移除私有构造方法和getInstance方法。下面,真的很简单。然后你将免费得到下面这个:

    1 public enum SafeSingleton implements Serializable {
    2    INSTANCE;
    3}

    当你再实现单例模式时,记住这些。如果你大量的使用RMI,它可以使你的生活更加简单。

    Reference: The Perfect Singleton from our JCG partner Marek Piechut at the Development world stories.

    Related Articles :

    • The dreaded double checked locking idiom in Java
    • Java Secret: Using an enum to build a State machine
    • Dependency Injection – The manual way
    • Java Generics Quick Tutorial
    • How does JVM handle locks

     

    • 转载自 并发编程网 - ifeve.com

    总结

    以上是生活随笔为你收集整理的完美的单例实现(The Perfect Singleton)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。