有限状态自动机(FSM:Finite State Machine),简称状态机。它是描述有限多个状态以及状态转移需要满足的条件和条件满足后触发的动作的数学模型。
状态机有四个要素:
因此,现态和条件是因,动作和次态是果。
状态迁移图是一种描述 系统的状态以及相互转化关系的 图形方式。下面是一个“工单”的例子:
其中:
状态迁移表:用表格的形式来表示状态之间的关系。下面是“工单”的例子的简化版:
初学者往往会把某个“程序动作”当作状态来处理,我们称之为“伪态”。另外一个比较致命的错误是,在划分状态时,漏掉一些状态,我们称之为“漏态”。“动作”和“状态”的区别是:“动作”是不稳定的,一旦执行完就结束了;“状态”是相对稳定的,如果没有外界条件的触发,那么状态会一直持续下去。
状态模式允许一个对象在其内部状态发生改变时,改变其行为。
状态模式中的角色包括:
关于状态模式的具体细节,请点击这里。
1)代码结构:
2)说明:
3)UML图:
4) 说明:
WorkOrderSubject
:抽象主题角色,实现了增加、删除和通知观察者的方法
WorkOrderState
:抽象状态角色
IWorkOrderListener
:抽象观察者角色
WorkOrderListenerImpl.*
:具体观察者
WorkOrderStateImpl
:具体状态角色
WorkOrder
:扮演 观察者模式中的具体主题角色 + 状态模式中的上下文角色
changeState(WorkOrderState state)
:更新WorkOrder自身状态之后,会通知所有的具体观察者对象
5)点此下载源代码
java -jar workorder.jar