about singleton
about singleton
我读到singleton很糟糕,因为它们是反模式的。我还读到,造成这种情况的主要原因是对singleton的全局引用:
是否总是可以避免单例
如果是这样的话,比如说我有一个IOCP网络,我需要初始化它一次,这个对象需要在软件的整个生命周期中保持不变。同样的还有一个我称之为"paint"的类,我把数据打印到屏幕上。如果我没有单独创建它,我仍然需要一个当前Hwnd的全局变量,并且每次使用它时都要在本地初始化对象(真的很烦人)。
所以使用singleton是我的设计有缺陷的标志吗?我该怎么做才能避开它们
谢谢。
是否总是可以避免单例?
是的,使用全局变量,或者(甚至更好)修复您的设计。修复设计的一种选择是使用某种控制反转。
如果你尝试使用OO原则,你会发现你可以不使用单例。
这是一个问题,即哪些实体需要访问只能实例化一次的资源,以及何时(此后称为资源)。
如果需要访问该资源的实体可以用该资源实例化(IOC,依赖注入),那么这是最好的方法,从而保持简单并避免创建Singleton。亲吻。
如果出于某种原因,有一些实体需要访问资源,但无法使用它进行实例化,则需要实现替代方案。一个选项是Singleton,但另一个我喜欢使用的选项是Factory。这完全封装了资源的创建,而且更经得起未来的考验,这意味着如果在未来出于某种原因,可以实例化资源的多个实例,那么它就是全部封装的。你不能/不应该和单身汉一起做这件事。当然,在内部,工厂将维护资源的唯一实例。
有人认为,如果一个实体不能用资源实例化,那么设计就不好。这是可以争辩的,而且可能应该在个案的基础上这样做。
相关文章:
- C++ Singleton - Prevent ::instance() to variable
- About std::unique_prt() and decltype()
- Singleton ofstram:已创建但未写入的文件
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- C++Singleton实例禁用重新调用
- 没有从Singleton到嵌套Listener*的可行转换
- 禁止复制构造函数和赋值运算符singleton类
- Singleton模式中的手动析构函数调用:调用多次
- 如何将Singleton类信号连接到MainWindow类插槽或方法
- Helgrind 报告了使用 Singleton 及其构造函数之间可能存在的竞争
- 关于std::cout,为什么使用"extern"比"singleton pattern"
- 静态库中只有一个C 11 Singleton的实例
- Forward宣布了Singleton班级,并带有Freshial声明的朋友功能
- 对Singleton的未定义引用::实例
- Singleton with template
- 在用户类中包括PYBIND11嵌入式模块的正确方法(作为Singleton类的一部分)是什么?
- Singleton和不同的库版本
- 具有多个非默认构造函数基的Singleton派生类
- About cufft R2C and C2R
- about singleton