2

好吧,我读到单身很糟糕,因为它们是反模式。我还读到,这样做的主要原因是对单例的全局引用,无论如何:

是否总是可以避免单身?

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

所以使用单例是我的设计有缺陷的标志吗?我能做些什么来避免它们?

谢谢。

4

2 回答 2

5

是否总是可以避免单身?

是的,使用全局变量,或者(甚至更好)修复您的设计。修复设计的一种选择是使用某种控制反转

如果你尝试使用OO 原则,你会发现你可以不用单例。

于 2012-09-20T06:28:28.343 回答
0

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

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

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

有些人会争辩说,如果不能用资源实例化实体,那么设计就是糟糕的。这可以争论,并且可能应该根据具体情况进行。

于 2012-09-20T09:48:40.437 回答