Singleton怎么了?

时间:2020-03-05 18:59:45  来源:igfitidea点击:

不要浪费时间在这个问题上。跟进:单身人士有什么不好?

请随意在Singleton上bit子。

Singleton使用不当可能会引起大量油漆。我们在单例中遇到了什么样的问题?这种模式的常见误用是什么?

在深入研究Corey的答案后,我发现了一些有关该主题的精彩文章。

  • 为什么单身人士有争议
  • 表演者单身人士
  • 单身人士是病态的骗子
  • 所有的单身人士都去了哪里?
  • 单身人士的根本原因

解决方案

回答

Singleton模式本质上没有错。它是一种工具,有时应使用。

回答

看到这个线程

回答

我认为可能更合适的问题是:在什么情况下使用SIngleton模式是不合适的?或者我们看到了使用不该使用的Singleton的内容。

回答

我看到的大多数单例模式不是以线程安全的方式编写的。如果写得正确,它们会很有用。

回答

基本上,单例是拥有静态数据并假装它不是真正静态的一种方法。

我当然会使用它,但请尽量不要滥用它。

回答

原始GoF设计的一个基本问题是,析构函数不受保护。引用单例实例的任何人都可以随意销毁单例。

请参阅John Vlissides在他的书" Pattern Hatching"中更新的" To Kill Singleton"(亚马逊链接)。

干杯,

回答

有时,它可以使代码更加紧密地结合在一起,而单例类则通过名称直接从代码库的不同部分进行引用。因此,例如,当我们需要测试代码的某些部分并且它从代码的不同部分引用了一个单例时,我们就无法轻松地通过模拟对象伪造该依赖项。

回答

单一对象本身没有任何问题,作为一种模式,它在认识到某些对象只能创建一次的必要性中起着至关重要的作用。

它经常用于委婉表达全局变量,以避开全局变量的污名,而这种用法天生就是错误的。如果全局变量恰好是正确的解决方案,则使用单例不会对其进行改进。如果使用全局变量不正确(很常见),则将其包装为单例将不会使其更正确。

回答

我还没有像其他海报那样接触过Singleton,但是我看到的(在C#中)几乎所有的实现都可以通过静态类/方法来实现。我想我们可能会说静态类是单例模式的实现,但这不是我所看到的。我一直在看到人们建立并管理这些Singleton类/对象时,他们真正需要的只是使用static关键字。

因此,我不会说Singleton模式很糟糕。我会说这有点像枪支。我认为枪支并不坏,但可以肯定可以适当地使用它们。