所以我比较新的OO设计,我想知道使用Singleton设计模式。我已阅读了一些关于why singletons are bad的文章,但仍无法弄清楚我是否需要一个。我想尽可能避免它。我应该使用单身进行硬件管理吗?
就我而言,我使用的是OceanOptics光谱仪,它可以通过C++进行控制和咨询。
我已经把所有管理光谱仪的代码(发现它们,设置或获取参数,检索数据)放在一个类SpectrometerProxy
中。
我想知道这个班是否应该是单身人士。我觉得有可能是可以证明它有几个原因:
它管理的硬件
不管光谱仪的数量,他们都在控制和协商通过这个类
有一个特定的程序必须按照精确的顺序进行,并且只能进行一次(打开光谱仪,检查一些变量,并在程序停止时关闭分光计)
然后,我不知道是否有更好的方法来实现这个类,而不是做一个单身人士。我想到的另一个解决方案是将它保留为普通类,但是防止复制(通过声明复制构造函数和赋值运算符为private),并将指针传递给需要它的类:它不会阻止创建多个SpectrometerProxy
,我喜欢避免这种情况。
我也想过让它全部是静态的,但是它会依靠客户端代码以正确的顺序调用正确的静态成员函数(并且不会忘记正确关闭光谱仪的连接),因此会容易出错并且违背RAII原则。
那么,对于这个问题,单身是一种可能的正确设计方法,还是应该排除它并寻找其他方法?
简答:“不”。较长的回答:“你为什么?” – jalf 2013-05-13 09:59:36
我知道我不应该。我读过为什么单身人士不好。 “你为什么?”是我的问题。另一部分是“什么是可能的选择?”。谢谢。 – JBL 2013-05-13 10:07:51
今天,你认为你想通过一个代理来控制你所有的光谱仪。明天,您可能需要多个独立代理。如果只有一个硬编码假设,那将会更困难。 – 2013-05-13 10:31:25