我已经阅读了很多关于 SO 的博客文章和答案,指出 Singleton 是一个糟糕的设计。以前我实现了一个单例 CameraControl 类。此类控制连接到系统的相机。在以下知识下:
- 在任何情况下都不会有超过一个摄像头(摄像头制造商提供的摄像头 API 控制所有摄像头)。
- 同时在多个地方使用相机制造商的 API 在过去曾引起过问题(例如,一个线程试图抓取图像,另一个线程试图设置快门速度)。
- 我的类(class)只提供了几个额外的方法来显示在 UI 中捕获的图像。将图像转发到人脸检测器,...(即它不是内存密集型的)。
我选择让这个类成为单例类是一个错误的决定吗?
最佳答案
单例被认为是一种气味,因为:
它们在道德上等同于全局变量,因此它们的使用隐藏了代码中的依赖关系,而不是通过接口(interface)揭示它们。
它们促进紧密耦合,因为您的代码依赖于特定类型的特定实例。如果有一天您希望您的 UI 针对不同的相机管理器运行怎么办?
它们使单元测试变得困难,因为它们在程序的整个生命周期中都带有状态。当状态从一个测试转移到另一个测试时,它会使测试依赖于状态,这是一种非常大的气味。
关于c++ - 用 Singleton 保护资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637160/