我从State 模式的典型实现中收集到的是:
问题: 表示一个对象O,其行为根据其当前状态而改变。
解决方案:
1. 让对象O中的另一个对象S表示状态
2. 对象S将调用O的相应操作
3. 对象S将决定对象O的下一个状态
我关心的主要是#3
. 状态转换表基本上分布在所有状态中。我已经看到这些解决方案变得非常繁琐,难以快速管理。这些状态不是指标,而是包含太多关于状态机的信息。
即使#2
困扰我,我想这是相当合理的(摩尔机器。)我看到的唯一问题出现在错误修复/调试期间:代码导航/理解变得困难,直到将所有状态映射提交到内存。
下面的实现会更精确吗?
将状态表示为枚举,对象根据枚举所持有的值决定动作。它们位于一个表(δ,状态转换函数)中,该state transitions
表是当前状态到下一个状态的映射。这state transition table
也包含要执行的操作(Mealy machine)