【发布时间】:2012-09-20 06:11:38
【问题描述】:
好吧,我读到单例很糟糕,因为它们是反模式。我还读到,这样做的主要原因是对单例的全局引用,无论如何:
是否总是可以避免单例?
如果是这样,比如说我有一个 IOCP 网络,我需要对其进行一次初始化,并且该对象需要在软件的整个生命周期中保持不变。同样带有一个我称之为“绘画”的类,我将数据打印到屏幕上。 如果我没有单独使用它,我仍然需要当前 Hwnd 的全局变量,并在每次我要使用它时在本地初始化对象(真的很烦人)。
所以使用单例是我的设计有缺陷的标志吗? 我能做些什么来避免它们?
谢谢。
【问题讨论】:
-
单例不是反模式。这是一个模式! Singleton@Wiki。您还可以描述一个 getter 方法,它返回对类中实例的引用,并通过继承或聚合提供访问。它们很好,使用它们也不是什么大不了的事。
-
@Pie_Jesu 你错了。在 99.5% 的单例使用情况下是错误的。
-
恕我直言,大多数人误解了单例,它的主要重点是不允许构造同一类的其他实例,因此您只有一个实例。如果你去掉“你不能实例化另一个这种类型的对象”,你会发现每个全局都可以用作单例的替代品。您也可以只在类的构造函数中传递您需要的对象。
-
+1 表示
i read singleton are bad。真实的故事。 -
我也不明白为什么
having 1 instance is bad。它是一个很好的模式,应该使用。没有看到不使用它的好论据。
标签: c++ oop design-patterns singleton single-instance