5

我有一个有许多状态的状态机A--B--C--D--EC例如,A如果某些条件得到验证,我有很多过渡。对于每个状态,我都有一个扩展抽象类的类State,并且我有一个将每个转换方法委托给状态方法的管理器。问题是“国家可以直接调用经理转换方法吗?”。我在互联网上只看到过一个例子,其中有一个主类确切地知道转换发生了多少次(即insertQuarter(), ejectQuarter(), turnCrank(), dispense())。我发现这样做的唯一方法是在状态中调用管理器转换方法。这是错误的做法还是不好的做法?

在此先感谢托比亚

4

2 回答 2

3

如果您需要一个简单的同步状态机,在任何给定时间点最多执行一次,我正在考虑的模型如下:

1) 执行的上下文由 Context 对象表示。上下文在状态之间传递,并用于管理器的流决策。上下文的 API 取决于您需要系统的通用性。

2)状态接口包含执行(上下文)方法,具体逻辑发生在哪里。允许使用和更改上下文数据。

3) 管理器配置了转换规则。给定最后一个状态和上下文,它能够确定下一个要执行的状态。它从执行初始状态开始。每次执行状态 S 后,它都会根据与状态 S 关联的转换规则检查上下文对象。当它到达终端状态时,流程结束。

通过这种设计,状态实现不会以任何方式了解管理器,并且不会参与路由决策。

于 2010-06-10T14:24:02.207 回答
0

是的...至少如果我正确理解了您的问题。管理器必须保留对当前状态的引用,因此当前状态必须能够要求管理器移动到下一个当前状态。以Wikipedia 示例为例。

于 2010-06-10T15:14:38.580 回答