Why are singletons considered to be a bad practice?
本问题已经有最佳答案,请猛点这里访问。
复制品:
What is so bad about Singletons?
我在读这个问题,惊讶地发现他认为独生子女是一种"坏习惯",事实上,我认为这是常识。
在任何使用iBATIS从XML加载查询的项目中,我都使用过单例。在这些情况下,它极大地提高了速度。我不知道你为什么不在这种情况下使用它们。
所以…为什么是坏的?
它们是一种工具,就像任何工具一样,有时你应该使用它们,有时你应该使用其他东西。在这种情况下,通常情况下,其他的东西(工厂类、静态类)在乍一看似乎适合单例情况下会更好。
当
他们不一定是坏的,只是误用和过度使用。人们似乎莫名其妙地被这种模式所吸引,并寻找新的、有创意的方法将其应用到他们的应用中,不管它是否真正适用。
单身一点也不坏。事实上,它们在许多情况下都非常有用。但是,它们有两个主要方面已经成熟,可以被滥用和/或失败:
- 单元可测试性
- 多线程
两者都可以处理,但初学者往往忽略了这一点(通常是由于无知),最终导致的麻烦远超过他们所知道的处理方法。
它们通常与单元测试一起被认为是坏的。
如果您有一个单例,这意味着您的一个或多个类在某些方法的某个地方使用它。这是一个依赖项,当单元测试您的类时,您不能欺骗它,因为该类在没有通过其构造函数或属性请求的情况下直接使用它。
这就是为什么人们说他们"坏"的原因。
而且,在多线程应用程序中,很多人都很糟糕地实现了它们,以至于有机会多次调用声明。
它们并不一定是坏的,因为它们往往被过度使用,并且在不需要的时候被大量使用。