【问题标题】:Singleton pattern in all classes [closed]所有类中的单例模式[关闭]
【发布时间】:2018-11-14 20:40:36
【问题描述】:

我有一个非常快速的问题。 我正在和我的朋友讨论单例模式。 他们说它不是在所有课程中都使用,我有不同的意见。 这是真的吗?为什么不在所有课程中都使用它很重要? 对我来说完全是无稽之谈。模式用于防止多次实例化,就是这样。有什么问题?

【问题讨论】:

  • 如果你真的需要完全相同的实例,单例模式是有意义的。但我无法想象在任何用例中我只需要项目中每个类的一个实例(并且恰好是一个)。
  • 好的,但是我在 JS 中使用了原型,并为 Singleton 模式制作了一个模式。在每个类中不使用单例模式时程序会变慢吗?
  • 嗨,如果它真的符合我的目的,我也认为不这样做没有任何问题,但正如@MarkusSafar 所述,很少有一个项目可以让所有类都遵循单例模式而没有例外。

标签: javascript php oop


【解决方案1】:

幼稚单例的主要“问题”是它使用静态访问器。这迫使您在使用属性或方法时按类名引用单例。这称为实现编码(与coding to the interface 相反)。随着架构的发展,它否定了对您的架构最有用的间接点之一:如果您在应用程序周围的许多地方使用单例,您最终会广泛分散类名。如果您已经声明了一个接口并改为使用该接口,并且想在以后更改类名,那么您只需修改实例化实现的单行代码。

当涉及到测试时,接口编码变得尤为重要,在这种情况下,人们经常需要将生产实现换成测试实现,这样您就可以隔离客户端类的行为。

您仍然可以使用单例。但是你应该把它隐藏在一个接口后面,这样任何客户端都不需要知道它是一个单例。为此使用dependency injection

【讨论】:

  • Uaau!非常感谢您的回答。我不这么认为。我制定了一个方案,并在使用原型时使用它。但始终包含单例模式。如果雇主知道您是初级开发人员,这是否会造成如此大的问题?
  • 我不是 100% 确定你在问什么。但是,单例是否被雇主认为“不好”取决于公司以及他们使用 OO 和单元测试的方式(如果有的话)。一些公司对快速编写代码更感兴趣,只在“未雨绸缪”时才处理架构。这类项目的中心通常有一堆单例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多