不要在这个问题上浪费你的时间。跟进:What is so bad about singletons?
请随意惹恼Singleton。
不恰当地使用Singleton可能会导致大量油漆。你对单身人士有什么样的问题?什么是这种模式的常见滥用?
在深入研究Corey的回答之后,我发现了一些关于这个话题的重要文章。
答案 0 :(得分:4)
答案 1 :(得分:3)
有时它可以使你的代码更紧密地与单个类一起被代码库的不同部分的名称直接重新引用。因此,例如,当您需要测试代码的某些部分并且它从代码的不同部分引用单例时,您无法轻易地使用模拟对象伪造该依赖项。
答案 2 :(得分:2)
Singleton模式没有任何内在错误。它是一种工具,有时应该使用它。
答案 3 :(得分:1)
我没有像其他一些海报那样接触过Singleton,但几乎我所见过的所有实现(在C#中)都可以用静态类/方法实现。我想你可以说静态类是单例模式的实现,但这不是我所见过的。当他们真正需要的是使用static关键字时,我一直看到人们建立和管理这些Singleton类/对象。
所以,我不会说Singleton模式很糟糕。我会说它有点像枪。我不认为枪支是坏的,但它们肯定可以被不恰当地使用。
答案 4 :(得分:0)
我认为更合适的问题可能是:在什么情况下使用SIngleton模式不合适?或者你看到了什么,使用不应该的单身人士。
答案 5 :(得分:0)
基本上,单例是一种获取静态数据并假装它不是静态数据的方法。
我当然使用它,但尽量不要滥用它。
答案 6 :(得分:0)
原始GoF设计的一个基本问题是析构函数不受保护。任何引用单例实例的人都可以自由地销毁单例。
请参阅John Vlissides在他的“模式孵化”(Amazon link)一书中更新“杀死一个单身人士”。
欢呼声,
罗布
答案 7 :(得分:0)
单身人士本身没有任何问题,作为一种模式,它在识别某些对象只需要创建一次的需要方面起着至关重要的作用。
经常使用的是对全局变量的委婉说法,试图绕过全局变量的耻辱,而这种使用本质上是错误的。如果全局变量恰好是正确的解决方案,则使用单例不会改善它。如果它(通常很常见)使用全局变量不正确,将它包装在单例中将不会使它更正确。
答案 8 :(得分:-1)
我看到的大多数单例模式都不是以线程安全的方式编写的。如果写得正确,它们会很有用。