0

不太确定以前是否有人问过这个问题。

语言是c++。我正在编写一个包含许多应该具有静态行为的数据项的类,例如一个 1 KB 的缓冲区,其中包含一些数据并且应该为所有对象共享。我的老板问我,你为什么不写一个单例类,把所有的数据项都放在里面呢?

我对单例有一些痛苦的经历,最近我在谷歌上搜索了“单例是邪恶的”并阅读了几篇文章。在 SO 中,我也读到了同样的内容。所以在上述情况下我有点犹豫是否使用单例,因为我相信那里并不真正需要它。所以我问我的老板,是否可以为所需的数据项设置静态数据成员,而不是使类单例?但他没有给我任何明确的答案,而是告诉我,设计模式的存在是为了让生活更轻松,那么使用它有什么问题。我不想和他争论。:)

我不是 OOP 专家。因此,如果有人可以评论谁的观点更有意义[以及两者是否都是错误的:)],这将是有帮助的。

谢谢...

4

1 回答 1

2

单例本质上只是围绕全局变量的一些 OO 封装。

如果您将您的状态封装在某个类中,并将其作为静态成员添加到需要该信息的类中,那么您实际上与单例并没有太大区别,只是至少有两个缺点:

  • 您排除与其他类共享该状态。
  • 在简单的实现中,没有什么可以阻止任何人创建新类的另一个实例。如果这在语义上是无效的,则不应在代码中允许它,这意味着无论如何您都必须编写所有单例功能。

当然,只是在全局变量上添加一点单例魔法并不能解决全局状态的问题,从这个意义上说,单例是邪恶的™。但是在某些情况下,您的模型需要具有全局状态。在这些情况下,封装是一件好事,因为它允许您控制谁修改什么、何时以及如何修改。例如,您可以使单例工厂方法只能由某些类访问。

于 2013-01-31T12:15:55.360 回答