如何实现“单实例”式设计?

时间:2009-09-09 08:31:47

标签: c++ design-patterns singleton

我正在编写一个将作为守护程序运行的应用程序。 UI将通过TCP连接到它。现在,有一个名为UiTcpInterface的类,它将处理UI和该守护进程之间的所有通信。

现在,我遇到了确保UiTcpInterface只有一个实例的问题。最好的方法是什么?目前,我想到了两种方式:

  1. 这是经典的单例模式:将构造函数设为私有,并为类instance()提供静态UiTcpInterface方法
  2. 将所有功能实现为UiTcpInterface的静态成员。主要方法将确保完成所有初始化。
  3. 我应该遵循以下哪两项?你能给我一份这两种方法的专业清单吗?

    谢谢:)

5 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

实际上,这两者中没有一个是单一实例,而是全局访问。 如果您想要单个实例,请确保管理模块的代码 需要它只会创建一个实例并将其传递下去 如果您希望代码强制执行它,我会建议在构造函数中使用实例计数器和断言来检查它是否是唯一的实例。

答案 2 :(得分:1)

我更喜欢单身模式。一个论点是可测试性。对于单元测试,它更容易,例如从instance()返回一个模拟对象。另外,如果你有例如不同的实现或不再是单个对象,更改更容易。

答案 3 :(得分:0)

我会选择第一种方式来实现它,因为如果你以后改变主意,改变非单身人士会更容易。

答案 4 :(得分:0)

SingleTon更好,
您始终可以重置对象状态,序列化对象(不确定这是否适用于c ++)。 单例对抗静态类有很多其他好处。 我更喜欢使用静态类方法来包装一般函数(如Math Class)