gpt4 book ai didi

java - 单例设计模式实现

转载 作者:行者123 更新时间:2023-12-02 03:38:55 24 4
gpt4 key购买 nike

我看到了 Singleton 类的不同实现。然而,这个特定的实现:https://sourcemaking.com/design_patterns/singleton/java/1不在私有(private)构造函数中创建对象。

有人可以解释一下,这两种实现之间的优点或缺点是什么?给出的描述很少,我还没有从中理解太多。

谢谢。

最佳答案

您提供的链接解释得很好,如果简洁的话......但让我尝试扩展......

The inner class is referenced no earlier (and therefore loaded no earlier by the class loader) than the moment that getInstance() is called.

这是解释中最重要的部分。

上面提到的内部类是 SingletonHolder 类,它的存在只是为了保存 Singleton 的实例。

因为这个类是私有(private)的并且没有在其他任何地方引用,所以保证这个类不会被初始化(由Java ClassLoader加载),直到Singleton的getInstance()方法 被调用,因为这是 JVM 初始化该类所需的最早时间。

初始化类时,它包含的任何静态最终字段(和静态 block )都会在该类可供任何用户代码使用之前进行初始化。此初始化是线程安全的,因此使用此模式的代码不需要任何通常在 Java 中单例模式的其他实现中发现的复杂同步逻辑。

参见this question有关替代实现的更多讨论,包括基于 enum 的解决方案以及更复杂、显式同步的 Singleton 版本。

请注意,如果您不关心使单例延迟加载(即仅在需要时初始化),则只需使用最简单的方法:

class Singleton {
public static final INSTANCE = new Singleton();
private Singleton() { /* cannot be instantiated externally */ }
}

关于java - 单例设计模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37080807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com