2012-02-20 73 views
1

我正在围绕状态模式的一个方面缠着我的脑袋。我了解维基百科等提供的基本示例,但如果我的StateContext类正在进行有条件的状态更改,例如说定时器不同于每个状态?带有条件状态变化的状态模式

因此,例如,说我们的州是AB,CD。我想基于状态计时器来改变状态。例如,保持在A中5秒,B保持7秒,C保持3秒,并且D保持10秒。

谁应该管理这段时间?各州应该了解其持续时间吗?在这种情况下,我觉得诡异的复制并粘贴_duration属性到每个状态,并认为也许我的State接口应该是具有该属性的抽象基类。

还是应该StateContext管理持续时间?在这种情况下,我感到恶心,IsInstanceOf检查我的_state

回答

1

StateContextState都不负责管理状态变化,它是从这种模式之外管理的。您应该有一个setState(...)方法或其他方法来更改StateContext类中的当前State实例。

+0

好吧。那么,一些外部StateController类可以根据StateContext中的状态来了解和做出决策? – Ternary 2012-02-20 02:33:01

+0

当然可以! :) – satoshi 2012-02-20 07:41:33

+0

抱歉的详尽答案。你说过你看过维基百科的例子吧?然后以绘图程序为例。这是UI负责StateContext中的状态改变。无论何时点击钢笔工具或选择工具,StateContext中的'State'实例都会改变。现在你看到了吗? :) – satoshi 2012-02-20 08:17:42