【问题标题】:How do I implement a "single instance"-like design?如何实现类似“单实例”的设计?
【发布时间】:2009-09-09 08:31:47
【问题描述】:

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

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

  1. 这是经典的单例模式:将构造函数设为私有,并为UiTcpInterface 类提供静态instance() 方法
  2. 将所有功能实现为UiTcpInterface 的静态成员。 main 方法将确保所有初始化都已完成。

我应该遵循这两个中的哪一个?你能给我一份这两种方法的赞成清单吗?

谢谢:)

【问题讨论】:

  • 同时连接多少个 UI?你在用线程吗?
  • 嗯,多个客户端将连接。而且我不知道我是否会使用线程。我用的是Qt,很多需要线程的东西都是信号槽处理的

标签: c++ design-patterns singleton


【解决方案1】:
【解决方案2】:

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

【讨论】:

【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我会选择第一种方式来实现它,因为如果您以后改变主意,更改为非单例会容易得多。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        相关资源
        最近更新 更多