状态设计模式中的过渡方法

Mat*_*ska 5 java state design-patterns

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

在此先感谢Tobia

Eya*_*der 3

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

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

2)State接口包含execute(Context)方法,具体逻辑发生在该方法中。允许使用和更改上下文数据。

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

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