about singleton

about singleton

本文关键字:singleton about      更新时间:2023-10-16

我读到singleton很糟糕,因为它们是反模式的。我还读到,造成这种情况的主要原因是对singleton的全局引用:

是否总是可以避免单例

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

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

谢谢。

是否总是可以避免单例?

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

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

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

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

如果出于某种原因,有一些实体需要访问资源,但无法使用它进行实例化,则需要实现替代方案。一个选项是Singleton,但另一个我喜欢使用的选项是Factory。这完全封装了资源的创建,而且更经得起未来的考验,这意味着如果在未来出于某种原因,可以实例化资源的多个实例,那么它就是全部封装的。你不能/不应该和单身汉一起做这件事。当然,在内部,工厂将维护资源的唯一实例。

有人认为,如果一个实体不能用资源实例化,那么设计就不好。这是可以争辩的,而且可能应该在个案的基础上这样做。