我知道单身人士强制要创建一次类。但是如果我不直接访问它,为什么要存在一个实例呢?为什么这种模式更容易使用静态方法和数据的完整静态类?
答案 0 :(得分:6)
前段时间我被问到使用单例而不是使用静态类有什么好处,这是我的回答:
答案 1 :(得分:5)
静态类和单例之间的主要区别在于,对于静态类,您需要在代码中的代码中对类名进行硬编码:
StaticClass::doSomething();
StaticClass::doSomethingElse();
使用单身人士时,您只需要对类名称进行一次硬编码:
$singleton = SingletonClass::getInstance();
// other code does not need to know where $singleton came from,
// or even that class SingletonClass exists at all:
$singleton->doSomething();
$singleton->doSomethingElse();
另一个重要的区别是单例类可以是层次结构的一部分,并且可以实现接口。
这并不意味着Singleton(模式)是好的,应该自由使用。但它比直接使用静态类更好。
答案 2 :(得分:-1)
[编辑]:我在下面写的东西实际上是完全错误的。几年前,通过downvote得到了这个答案的警报。它们确实有用;)
单例存在一次,但它可以具有内部状态 - 而不是静态类。你可以例如将它用作全局注册表,您无法使用静态类。
[编辑:]接下来会发生的事情和过去一样真实。
但是,单身人士是否是一个好主意是值得商榷的。他们将全局状态引入到应用程序中,这使得测试非常困难。但这是另一个讨论。