Singleton Design Pattern Implementation
我看到了不同种类的singleton类实现。然而,这个特定的实现:https://sourcemaking.com/design_patterns/singleton/java/1不在私有构造函数中创建对象。
有人能解释一下,这两种实现之间的优缺点是什么吗?给出的描述是最小的,我对它了解不多。
谢谢。
你提供的链接很好地解释了这一点,如果简单地…但让我试着扩大…
The inner class is referenced no earlier (and therefore loaded no earlier by the class loader) than the moment that getInstance() is called.
这是解释中最重要的部分。
上述文本所指的内部类是
因为这个类是私有的,不被引用到任何其他地方,所以保证这个类不会被初始化(由Java类加载器加载),直到EDOCX1的2个方法EDCOX1(1)被调用,因为这是最早的一个JVM来初始化该类。
当初始化一个类时,它包含的任何静态最终字段(和静态块)都将在该类对任何用户代码可用之前初始化。这种初始化是线程安全的,所以使用这种模式的代码不需要任何复杂的同步逻辑,您通常会在爪哇中的单模式模式中实现。
有关替代实现的更多讨论,包括基于
请注意,如果您不关心使单例惰性加载(即仅在需要时初始化),那么只需使用最简单的方法:
1 2 3 4 | class Singleton { public static final INSTANCE = new Singleton(); private Singleton() { /* cannot be instantiated externally */ } } |