从一开始C ++用户的观点来看,我看到单例类有用的唯一原因与我想要使用静态变量时类似。你们知道什么时候最适合使用单身人士课程吗?
答案 0 :(得分:8)
唯一一次你应该使用单身人士的情况是极少数情况下VITAL只有这些物体中的一个。这根本不像你想象的那样频繁出现。
通常只需要创建相关类的单个实例就足够了,但不要放入强制执行对象唯一性所需的所有机制。
每次我使用单例(或在我使用的代码库中找到一个)时,我最终都删除它,因为我需要改变行为,而单例机器阻碍了它。我还没有在我们的代码(支付处理)中看到一个单例实际上有意义的情况。我有几个案例,我只有一个特定类的实例,但没有一个通过单例模式强制执行是必要或有用的。
答案 1 :(得分:4)
我无法想到使用单例类的任何实例。
在Java中,他们主要是为了组织。但是,在C ++中,您应该使用命名空间。
答案 2 :(得分:4)
当你真的需要它时,你会知道的。
这可能永远不会发生。
当你认为自己想要它时,你可能错了。
答案 3 :(得分:1)
我曾经用 global 静态访问器创建单例:UserRegistry::getInstance()
。现在,在Dependency Injection时代,我只使用registry。也有助于单元测试。
答案 4 :(得分:0)
Singleton类是美化的全局变量。仅在绝对必要时使用,即当对象在整个实现范围内只有一个实例时。
答案 5 :(得分:0)
昨天黑客新闻上有一个帖子谈论使用单身人士不是一个好主意。关于使用单例(全局配置数据,网络服务器应用程序中的会话管理)是一个好主意,有几个想法,但对于单身人士的每一个理由,也有很好的论据,为什么这不是一个好主意。 http://news.ycombinator.com/item?id=2743894
答案 6 :(得分:0)
我可以想到游戏开发领域的几个原因,绝对需要将一个类实现为单例:
物理引擎,精灵处理程序,重力处理程序(如果与物理引擎分开),输入解析器等
答案 7 :(得分:0)
一切都可以在没有单例的情况下解决。但我发现自己使用它来更好地控制图形上下文等对象的初始化和销毁。或者当使用状态机更好地控制状态转换时。此外,在(极少数)情况下,系统资源仅限于 1 个单元(例如控制台),以及多线程以防止条件竞争。 (https://refactoring.guru/design-patterns/singleton/cpp/example)