gpt4 book ai didi

c++ - "State pattern"与 "one member function per state"?

转载 作者:行者123 更新时间:2023-11-30 05:26:55 26 4
gpt4 key购买 nike

我的类(class)有 3 个状态。在每个状态下,它都会做一些工作,然后转到其他状态,或者保持在相同的状态(在 95% 或更多的情况下,它会保持在相同的状态)。我可以实现状态模式(我假设你知道)。我非常喜欢的替代方案是:

每个状态我都有一个成员函数,还有一个指向成员函数的指针,它指向当前状态函数。当处于一个状态我想进入另一个状态时,我只需将该函数指针指向另一个状态函数。 (也许这不完全等同于状态模式,但在我的例子中它工作正常)。

我认为这两种方式几乎相同。

所以,我的问题是:

  1. 哪种解决方案更好(取决于什么)?
  2. 是否值得为每个状态声明一个类(只有一个函数)?我认为那是人为的。
  3. 性能如何?创建状态类的新对象(在状态模式的情况下)不会带来轻微的开销吗? (当然状态类不应该有成员,但无论如何它应该花费一些)

最佳答案

您并没有真正提到您的程序将在哪些条件下运行,因此很难具体评论一种实现相对于另一种实现的开销,所以我只对代码可维护性发表评论。

我个人认为,除非您的状态机非常简单并且会保持简单,否则为每个状态声明一个类会更易于维护、可扩展和可读。一个好的经验法则可能是,如果您不能查看类里面的代码并将整个画面记在脑海中,那么您的类可能做得太多了。您为每个状态声明一个类而付出的少量开销可能非常值得您通过编写模块化代码(或最终维护它的任何其他人)获得的生产力提升。我遇到过太多“ super ”类,它们本质上是一个大的(也很难维护)状态机,可能最初只是一个简单的状态机,不推荐其他方式。

SOLID 首字母缩略词的“S”和“O”部分(https://en.wikipedia.org/wiki/SOLID_(object-oriented_design) 总是值得牢记。

关于c++ - "State pattern"与 "one member function per state"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37564597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com