【问题标题】:How to replace singleton design pattern如何替换单例设计模式
【发布时间】:2019-10-30 13:42:48
【问题描述】:

我有自己的简单Timer 实现,当创建计时器时,它会在TimerHandler 注册自己,

Timer::Timer()
: tick_counter_(0),
  target_tick_(0),
  increment_(false),
  started_(false),
  elapsed_(false) {
  handlers::TimerHandler::RegisterTimer(*this);
}

如您所见,RegisterTimer() 函数是静态的,TimerHandler 是作为单例实现的。

众所周知,这会在单元测试中产生问题!测试Timer 类和TimerHandler 类可能没问题,而且并不难。但是在测试使用Timer 的其他类时,有时会变得很棘手。

我想了解如何使用另一种设计来解决这个问题。

我目前想出的唯一解决方案是使用简单的依赖注入,只需将TimerHandler 作为参数传递到任何我想使用Timer 的地方。但这会使我的代码非常混乱,所以我希望能够避免这种情况!

【问题讨论】:

  • 我认为这些基本上是您的选择。要么你只能有一个,要么你可以有多个,然后你需要到处传递它,这样你就知道要使用哪个了。
  • 为什么在使用其他类时会很棘手?

标签: c++ design-patterns singleton


【解决方案1】:

我认为你的结论是正确的,但它不一定是杂乱无章的。这个答案比我能更好地描述它: How to avoid Dependency Injection constructor madness?

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 也许我将不得不采用这种方法。我也在尝试完成 google C++ 风格指南,它虽然不能与我已有的模式一起使用。请参阅this 了解更多信息。
猜你喜欢
  • 2017-10-12
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多