【问题标题】: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 加载查询的项目中,我都大量使用了单例。在这些情况下,它极大地提高了速度。我不知道为什么你不会在这种情况下使用它们。

那么...为什么它们不好?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    它们不一定是坏的,只是被滥用和过度使用。人们似乎莫名其妙地被这种模式所吸引,并寻找新的和创造性的方法将其硬塞到他们的应用程序中,无论它是否真的适用。

    【讨论】:

      【解决方案2】:

      它们是一种工具,与任何工具一样,有时您应该使用它们,有时也应该使用其他工具。在这种情况下,在乍一看似乎适合单例的情况下,其他东西(工厂、静态类)通常会更好。

      Design Patterns 出现时,似乎每个人都加入了 Singleton 的潮流——他们无处不在,甚至是他们不应该出现的地方。你现在看到的是(也许是当之无愧的)强烈反对。并不是说您根本不应该使用它们,但退后一步看看所有可用的选项可能是个好主意。

      【讨论】:

        【解决方案3】:

        单身人士一点也不坏。事实上,它们在许多情况下都非常有用。但他们确实有两个主要领域很容易被滥用和/或失败:

        • 单元可测试性
        • 多线程

        两者都可以处理,但初学者经常忽略这样做(通常是由于无知),最终造成的麻烦比他们知道如何处理要多得多。

        【讨论】:

          【解决方案4】:

          它们通常与单元测试一起被认为是不好的。

          如果你有一个单例,这意味着你的一个或多个类在某些方法的某个地方使用它。这是一个在对类进行单元测试时不能欺骗的依赖项,因为该类直接使用它,而无需通过其构造函数或属性请求它。

          这就是人们通常说他们“坏”的原因。

          此外,在多线程应用程序中,很多人对它们的实施很糟糕,以至于有可能多次调用实例化。

          【讨论】:

          • 这不是它们对多线程不利的唯一原因。如果做错了,它们可能会成为一个瓶颈,迫使对原本可以并行使用的资源进行序列化访问。
          • 真的,谢谢你的指正。
          【解决方案5】:

          它们不一定是坏的,只是它们往往被过度使用,并且在不需要时使用了很多。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-31
            • 2013-09-13
            • 2010-11-09
            • 2010-10-22
            • 2011-11-20
            • 2011-05-14
            • 2010-09-26
            相关资源
            最近更新 更多