多级和分层状态机的设计

Posted

技术标签:

【中文标题】多级和分层状态机的设计【英文标题】:Design for Multilevel and hierarchical State Machines 【发布时间】:2012-11-26 13:30:14 【问题描述】:

在网络编程中,您需要具有多个层次深度的状态机。

State Machine 1
     State Machine 2

     State Machine 3
          State Machine 4

这里的状态机1 包含两个状态机233 还包含一台机器4

根据外部机器的状态,消息应该通过内部状态机。此外,如果内部状态机出现错误,则应将反馈提供给上层机器。

有没有好的方法来做到这一点?

现在我有一堆 if 语句和标志可以为我做这件事。我一直面临一些问题,即由于状态机的整个状态处于不可恢复状态而未设置某些标志。

更新: 我试图保持状态和机器静态。由于请求将通过机器和状态,请求本身将存储所需的所有元数据。在这种情况下,正常的状态机模式没有帮助。

【问题讨论】:

【参考方案1】:

State Pattern 将状态和上下文分开。 Context 可以存储状态的层次结构,而状态子类本身并不知道这个层次结构。所有的 if 语句都消失了,因为 if 下的每个部分都进入了一个单独的状态子类。

【讨论】:

我曾尝试使用 State,但似乎不适用于此类设计。实际上我的程序流程也在机器之间来回切换。就像在一个事件中我在内部机器中,但对于下一个事件我需要在外部机器中。这就是造成重大问题的原因。 您应该阅读有关设计模式的 GOF 书籍。实施部分中讨论了实施您所谈论的状态转换。我给大家总结一下:状态转换可以完全在 Context 中实现,也可以在 State 子类中实现。您应该通过询问以下问题来选择在哪里实施:状态的数量是固定的还是会增加更多?

以上是关于多级和分层状态机的设计的主要内容,如果未能解决你的问题,请参考以下文章

Verilog学习笔记设计和验证篇...............同步有限状态机的指导原则

001-初识状态机

怎么定义Verilog状态机每个状态执行啥动作?

如何以面向对象的思想设计有限状态机

如果在设计有限状态机时,未使用状态的下一个状态设置为初始状态,这种方法称为最小状态( )接近?

三段式状态机设计