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

时间:2010-06-10 14:01:33

标签: java design-patterns state

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

提前致谢 托比亚

2 个答案:

答案 0 :(得分:3)

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

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

2)状态接口包含执行(Context)方法,其中发生特定逻辑。允许使用和更改上下文数据。

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

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

答案 1 :(得分:0)

是的......至少我是否理解你的问题。 管理员必须保持对当前状态的引用,因此当前状态必须能够要求管理器移动到下一个当前状态。请查看Wikipedia example以获取示例。