我知道在 Java 中实现单例模式的两种方法,我想知道哪一种更好以及为什么。
第一种方法是:
- 将类的构造函数声明为私有(private)
- 让类中的所有内容都是静态的 - 基本上让类实例本身成为单例
第二种方法是:
- 将类的构造函数声明为私有(private)
- 有一个静态成员来保存单例(可能是类的实例)
- 有一个静态 getInstance() 方法
我倾向于认为,即使第二种方法是最常见的,第一种方法可能会产生更好的代码可读性,这两种方法在运行时复杂性方面似乎同样有效,所以我真的不明白第二种方法背后的原因更常见且被认为是更好的实践...
请赐教!
最佳答案
第一种方法不是单例。 单例是一个只能存在一个实例的类,不能多也不能少。第一个有时称为“静态类”、“实用程序类”或“不可实例化类”。
有很多事情可以用“真正的”单例来完成,而用实用程序类则无法完成。例如,您可以有一个实现接口(interface)或扩展另一个类的单例;你不能用全静态方法来做到这一点。 all-static-methods 类通常是没有进行面向对象设计分析的证据
至于Java中有多少种实现单例模式的方法,实际上有很多有趣的方法,使用不同的语言特性来推迟初始化直到绝对需要时:类加载、枚举或只是一个同步块(synchronized block)和一个if
。
关于java - Singleton的2种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731771/