c++ - 用 Singleton 保护资源?

标签 c++ design-patterns singleton

我已经阅读了很多关于 SO 的博客文章和答案,指出 Singleton 是一个糟糕的设计。以前我实现了一个单例 CameraControl 类。此类控制连接到系统的相机。在以下知识下:

  • 在任何情况下都不会有超过一个摄像头(摄像头制造商提供的摄像头 API 控制所有摄像头)。
  • 同时在多个地方使用相机制造商的 API 在过去曾引起过问题(例如,一个线程试图抓取图像,另一个线程试图设置快门速度)。
  • 我的类(class)只提供了几个额外的方法来显示在 UI 中捕获的图像。将图像转发到人脸检测器,...(即它不是内存密集型的)。

我选择让这个类成为单例类是一个错误的决定吗?

最佳答案

单例被认为是一种气味,因为:

  • 它们在道德上等同于全局变量,因此它们的使用隐藏了代码中的依赖关系,而不是通过接口(interface)揭示它们。

  • 它们促进紧密耦合,因为您的代码依赖于特定类型的特定实例。如果有一天您希望您的 UI 针对不同的相机管理器运行怎么办?

  • 它们使单元测试变得困难,因为它们在程序的整个生命周期中都带有状态。当状态从一个测试转移到另一个测试时,它会使测试依赖于状态,这是一种非常大的气味。

关于c++ - 用 Singleton 保护资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637160/

相关文章:

c++ - target_compile_options() 仅适用于 C++ 文件?

c++ - 程序中出现错误 '#'

c++ - 使用原型(prototype)模式动态配置应用程序

c++ - 单例类的私有(private)析构函数

java - 为什么 Jersey 会导致单例类无法工作?

c++ - 如何在 Linux 上热重载共享库

c++ - QT中使用Signal和Slot时收不到数据

java - 通过 gson 解析带有混合子对象的 json 并作为列表发回

php - 一个 SQL 查询,还是一个循环中的多个?

c# - 静态构造函数和单例