我正在编写一个将作为守护程序运行的应用程序。 UI将通过TCP连接到它。现在,有一个名为UiTcpInterface
的类,它将处理UI和该守护进程之间的所有通信。
现在,我遇到了确保UiTcpInterface
只有一个实例的问题。最好的方法是什么?目前,我想到了两种方式:
instance()
提供静态UiTcpInterface
方法UiTcpInterface
的静态成员。主要方法将确保完成所有初始化。我应该遵循以下哪两项?你能给我一份这两种方法的专业清单吗?
谢谢:)
答案 0 :(得分:4)
已经多次讨论过这个问题。
Singleton - Why use classes?
Problems with Singleton Pattern
Why choose a static class over a singleton implementation?
https://stackoverflow.com/questions/1304647/static-storage-vs-singleton-why-people-prefer-singleton-closed
答案 1 :(得分:1)
实际上,这两者中没有一个是单一实例,而是全局访问。 如果您想要单个实例,请确保管理模块的代码 需要它只会创建一个实例并将其传递下去 如果您希望代码强制执行它,我会建议在构造函数中使用实例计数器和断言来检查它是否是唯一的实例。
答案 2 :(得分:1)
我更喜欢单身模式。一个论点是可测试性。对于单元测试,它更容易,例如从instance()返回一个模拟对象。另外,如果你有例如不同的实现或不再是单个对象,更改更容易。
答案 3 :(得分:0)
我会选择第一种方式来实现它,因为如果你以后改变主意,改变非单身人士会更容易。
答案 4 :(得分:0)
SingleTon更好,
您始终可以重置对象状态,序列化对象(不确定这是否适用于c ++)。
单例对抗静态类有很多其他好处。
我更喜欢使用静态类方法来包装一般函数(如Math Class)