我曾在一个普通的状态机中使用了状态模式(State Pattern)。我想实现从[A -> B], [B -> C] 和 [A -> C] 的转换。现在我们的领域规则发生了变化,我需要增加一条新规则,即只有在从未经过B的情况下,才能够从[C -> A]转换到A。这就要求状态有记忆性(states with memory)。有两种可能的解决方案:
谢谢。
- 创建一个新的状态CB指代B之后的C,并且遵循以下规则:[A -> B],[B -> CB],[A -> C],[C -> A]
- 利用上下文(Context)保存的先前状态列表(我们称之为StateHistoric),以及进行状态转换的日期(状态历史也是我们客户的领域需求)。然后按照以下规则进行状态转换:[A -> B],[B -> C],[A -> C],[C -> A,如果B不在Context.StateHistoric中]
谢谢。