- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到了 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的
被调用,因为这是 JVM 初始化该类所需的最早时间。getInstance()
方法
初始化类时,它包含的任何静态最终字段(和静态 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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!