关于单身人士

时间:2012-09-20 06:11:39

标签: c++ oop design-patterns singleton single-instance

我读单身是坏的,因为它们是反模式。我还读到,主要原因是全球对单身人士的引用,无论如何:

是否总能避免单身?

如果是这样,让我们​​举例说,我有一个IOCP网络,我需要初始化一次,这个对象需要在整个软件生命周期内保持不变。同样的是我称之为“paint”的类,我将数据打印到屏幕上。 如果我没有单独使用它,我仍然需要当前Hwnd的全局变量,并在每次我要使用它时在本地初始化对象(真的很烦人)。

所以使用单身是我的设计缺陷的标志吗? 我该怎么做才能避免它们?

感谢。

2 个答案:

答案 0 :(得分:5)

  

总是可以避免单身吗?

是的,使用全局变量,或者(甚至更好)修复您的设计。修复设计的一个选择是使用某种inversion of control

如果您尝试使用OO principles,您会发现没有单身人士就可以。

答案 1 :(得分:0)

这是一个问题,哪些实体需要访问资源,该资源只能实例化一次,何时(以下称为资源)。

如果需要访问此资源的实体可以使用资源(IOC,依赖注入)进行实例化,那么这是最好的方法,从而保持简单并避免创建Singleton。 KISS

如果由于某种原因,有些实体需要访问资源,但无法用它进行实例化,则需要实现替代方案。一个选项是Singleton,但我喜欢使用的另一个选项是Factory。这完全封装了资源的创建,并且更加面向未来,这意味着如果将来由于某种原因,可以实例化多个资源实例,那么它将全部封装。你不能/不应该尝试使用Singleton。当然,工厂内部将维护资源的唯一实例。

有些人会争辩说,如果一个实体无法用资源进行实例化,那么设计是不好的。这可以争论,而且应该根据具体情况来做。