Dat*_*Chu 9 c++ singleton design-patterns
我已经阅读了不少博客文章和答案,指出Singleton是一个糟糕的设计.以前我实现了一个单独的CameraControl类.该类控制连接到系统的摄像机.根据以下知识:
我选择让这个班级成为单身课程是一个糟糕的决定吗?
单身人士被认为是一种气味,因为:
它们是全局变量的道德等价物,因此它们的使用隐藏了代码中的依赖性,而不是通过接口来揭示它们.
它们促进了紧耦合,因为您的代码依赖于特定类型的特定实例.如果您希望某天的UI能够针对不同的摄像头管理器进行操作,该怎么办?
它们使单元测试变得困难,因为它们在程序的整个生命周期中都带有状态.当状态从测试到测试时,它可以使测试状态依赖,这是一个非常大的气味.
你可以读任何东西,迟早。不管有些人怎么说,没有根本原因反对在适当的情况下使用单例_。就你的情况而言,我有严重的怀疑,至少从你描述的方式来看是这样。无论相机制造商使用什么 API(可能是 C 语言),您的客户端代码都希望将每个单独的相机视为一个单独的对象,并且相机没有任何固有的独特性。
如果相机制造商的 API 使用 C 语言,并且您决定为其提供一个轻量级 C++ 包装器,以供您的 Camera 类(独占)使用,则单例在这里可能是合适的。这种轻量级包装器是单例的一种合法用途——世界上不可能在代码中拥有该库的多个实例。(不过,通常情况下,让 Camera 类直接处理 API,并跳过中间包装器会更容易。)