Fsm状态机

状态设计模式(state)与状态机(FSM)-管中窥豹

早先听过一个笑话:

一个宿舍有六个人。 问老大,你每天做什么啊,老大回答:“吃饭,睡觉,打豆豆”。 问老二,你每天做什么啊,老二回答:“吃饭,睡觉,打豆豆”。 。。。 问老六,你每天做什么啊,老六回答:“吃饭,睡觉”。 感觉奇怪,于是问老六:“大家都‘吃饭,睡觉,打豆豆’,为什么你只是‘吃饭,睡觉’”? 老六回答:“我就是豆豆啊”。

(哈哈。。。)笑过之后,我们来谈一下“吃饭,睡觉,打豆豆”。很明显,这是几个动作嘛,但是,也可以理解为几个状态。 下面我们从设计模式与状态机两个方面,分别做一下实现,看看其中的差别。

  • 状态设计模式(state)

先说下状态设计模式的概念:状态模式允许,对象在内部状态改变时,改变它的行为

这个模式,将状态封闭成对象,并在对象中处理相关的行为,符合“开-关”原则,封装变化,简化了开发难度。

UML图

如上图所示:

State接口类,定义了所有状态的公共接口,StateA类与StateB类,具体实现某一状态时应该处理的行为。

Context类,使用状态类,管理所有状态之间的关系。

通过以上概念,我们再来看“吃饭,睡觉,打豆豆”的故事。这几个状态,可以看做在能量值(精神状态)上的系列事件。

这里有一个PYTHON 实现:

code code1 code1

  • 状态机(FSM)

状态机(FSM),全称是有限状态机。行为建模工具,是表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。有限状态机由一系列有限的状态构成,每个状态存储了描述对象的一系列信息。在某些事件发生时,系统从一个状态转换到另一个状态,因此也可以将之称为事件驱动系统。

基本要素:状态、迁移、条件

状态:从开始到现在各种输入对系统的影响。

条件:也称“事件”,只有满足条件才能进行状态的改变。

迁移:状态变更时要进行的具体行为。

状态机的一个简单实现如下。

UML图

我们再来看“吃饭,睡觉,打豆豆”的状态机实现。

code code1 code1 code1 code1

  • 总结

状态设计模式,是状态机关于状态部分的抽象。状态机还包含状态的管理,事件的管理等。处理好状态设计模式才能为状态机的设计打下好的基础。

关于状态机的实现github上有相关的开源项目,感谢大家的耐心浏览!^^