是否有设计模式(如访问者,策略,状态等)或其他一些设计原则,以帮助设计一个良好的解决方案来模拟实体的状态流,例如 < strong>任务 实体。
任务以 新 状态启动,然后进入 BeingHandled 状态,然后 WaitingForApproval 然后可以将其移至 已完成 或 未批准 ,这基本上是回到 BeingHandled 的附加信息,说它是从 WaitingForApproval 返回的。
所以一般来说我们有一些一般的流程,然后我们可以在其中有一些内部流程。
谢谢,
ashilon
答案 0 :(得分:6)
这不是一种模式,而是一个概念:有限状态机。
总之,它是一个状态机,它只能在一个时刻具有活动状态。
Check what Wikipedia article在第一段中说:
有限状态机(FSM)或有限状态自动机(复数: 自动机),或简称为状态机,是数学模型 计算用于设计计算机程序和顺序逻辑 电路。它被设想为一个抽象的机器,可以在其中一个 有限数量的州。机器一次只能处于一种状态; 它在任何给定时间所处的状态称为当前状态。它 当由触发启动时,可以从一种状态改变为另一种状态 事件或条件;这称为过渡。特定的FSM是 由其状态列表定义,以及每个状态的触发条件 过渡。
答案 1 :(得分:2)
管理状态的模式称为状态设计模式 - State Pattern on Wikipedia。
它基本上将有限状态机中的各种椭圆/状态表示为基本状态类/接口的子类。在您的情况下,状态将是BeingHandled,WaitingForApproval,Finished,Not Approroved等。
将有一个状态处理程序类,它将保存系统的当前状态(currentState实例变量),该状态将是对基本状态类/接口的引用,但将根据当前状态保存其中一个子状态系统所处的状态。
所有可能在所有州共同发生的事件将形成State Base类中方法的超集。那些“可以”处理这些事件的状态将在调用这些事件时编写必要的逻辑。其余的事件将是该州的IllegalOperations。这些事件基本上将currentState中的currentState更改为另一个状态。
另外,请注意,您需要具有可用于分配给状态处理程序的currentState属性的不同状态的实例。你可以为这些州制造工厂。
我希望我能够向你解释......但是在白板上它更容易......如果有什么不清楚,请告诉我。
为了补充上述说明,我在博客上添加了一篇详细的文章解释状态设计模式 - http://www.javabrahman.com/design-patterns/state-design-pattern-in-java/
答案 2 :(得分:1)
一个任务以新状态启动,然后进入BeingHandled状态,然后进入WaitingForApproval,然后它可以移动到Finished或NotApproved,它基本上回到了带有其他信息的BeingHandled,说它是从WaitingForApproval返回的。
正如其他人所提到的,有限状态机(FSM)方法是一种建模所需行为的方法。 状态基本上是您提到的状态,但您还需要定义将任务从一个状态转换到另一个状态的转换。
在开始编码之前,我建议您草拟FSM并将其显示给您的同事(或客户),以确认状态和转换与您尝试解决的问题中的工作方式一致。更改白板上的图表比更改代码更容易。我使用PlantUML和PlantText.com快速生成图表,但白板更快。
我冒昧地开始做某事(我添加了一些任意的过渡),但它应该有所帮助。您可以删除某些状态,例如,New
和BeingHandled
可能是相同的状态,如果您无法真正想到将系统从一个转换到另一个的转换。同样,BeingHandled
和WaitingForApproval
也可以是相同的状态,如果您所做的只是批准/拒绝任务。尽量保持简单。
最后,当您要对其进行编码时,您不必使用状态模式(正如某些人所建议的那样)。它增加了解决方案的复杂性,因为每个状态都是一个单独的类(有时可能很有用,但如果你有很多状态或转换,它就很难维护)。 FSM已经存在了很长时间,并且可以使用二维阵列轻松编码。请查看How to implement a FSM - Finite State Machine in Java上的问题或询问Google。