【问题标题】:State Pattern with Conditional State Change具有条件状态更改的状态模式
【发布时间】:2020-03-23 10:40:04
【问题描述】:

我在理解状态模式的一个方面时遇到了一些麻烦。我了解维基百科等提供的基本示例,但是如果我的 StateContext 班级正在对每个状态不同的计时器进行有条件的状态更改怎么办?

例如,假设我们的状态是 ABCD。我想根据基于状态的计时器更改状态。例如在 A 停留 5 秒,B 停留 7 秒,C 停留 3 秒,D 停留 10 秒。

谁应该管理这个持续时间?每个州都应该知道它的持续时间吗?在这种情况下,我觉得将_duration 属性复制并粘贴到每个状态很麻烦,我认为我的State 接口应该是具有该属性的抽象基类。

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

【问题讨论】:

    标签: java design-patterns state-pattern


    【解决方案1】:

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

    【讨论】:

    • 好吧。那么,是否可以让一些外部的 StateController 类知道并根据 StateContext 中的状态做出决策?
    • 抱歉,答案很详尽。你说你看过维基百科的例子,对吧?那么以绘图程序为例。 UI 负责StateContext 中的状态更改。每当您单击钢笔工具或选择工具时,StateContext 中的 State 实例就会发生变化。现在你看到了吗? :)
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多