为啥单身人士被认为是一种不好的做法? [复制]
Posted
技术标签:
【中文标题】为啥单身人士被认为是一种不好的做法? [复制]【英文标题】:Why are singletons considered to be a bad practice? [duplicate]为什么单身人士被认为是一种不好的做法? [复制] 【发布时间】:2010-10-15 06:57:24 【问题描述】:复制:
What is so bad about Singletons?
我正在阅读this 的问题,并且惊讶地发现(s)他认为单身人士被认为是“不好的做法”,实际上认为这是常识。
在任何使用 iBatis 从 XML 加载查询的项目中,我都大量使用了单例。在这些情况下,它极大地提高了速度。我不知道为什么你不会在这种情况下使用它们。
那么...为什么它们不好?
【问题讨论】:
【参考方案1】:它们不一定是坏的,只是被滥用和过度使用。人们似乎莫名其妙地被这种模式所吸引,并寻找新的和创造性的方法将其硬塞到他们的应用程序中,无论它是否真的适用。
【讨论】:
【参考方案2】:它们是一种工具,与任何工具一样,有时您应该使用它们,有时也应该使用其他工具。在这种情况下,在乍一看似乎适合单例的情况下,其他东西(工厂、静态类)通常会更好。
当Design Patterns
出现时,似乎每个人都加入了 Singleton 的潮流——他们无处不在,甚至是他们不应该出现的地方。你现在看到的是(也许是当之无愧的)强烈反对。并不是说您根本不应该使用它们,但退后一步看看所有可用的选项可能是个好主意。
【讨论】:
【参考方案3】:单身人士一点也不坏。事实上,它们在许多情况下都非常有用。但他们确实有两个主要领域很容易被滥用和/或失败:
单元可测试性 多线程两者都可以处理,但初学者经常忽略这样做(通常是由于无知),最终造成的麻烦比他们知道如何处理要多得多。
【讨论】:
【参考方案4】:它们通常与单元测试一起被认为是不好的。
如果你有一个单例,这意味着你的一个或多个类在某些方法的某个地方使用它。这是一个在对类进行单元测试时不能欺骗的依赖项,因为该类直接使用它,而无需通过其构造函数或属性请求它。
这就是人们通常说他们“坏”的原因。
此外,在多线程应用程序中,很多人对它们的实施很糟糕,以至于有可能多次调用实例化。
【讨论】:
这不是它们对多线程不利的唯一原因。如果做错了,它们可能会成为一个瓶颈,迫使对原本可以并行使用的资源进行序列化访问。 真的,谢谢你的指正。【参考方案5】:它们不一定是坏的,只是它们往往被过度使用,并且在不需要时使用了很多。
【讨论】:
以上是关于为啥单身人士被认为是一种不好的做法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章