开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
要了解松鼠状态机,我们首先我们要了解有限状态机的概念。
有限状态机的概念
有限状态机(英文名称是FSM)的作用,就是为对象的行为进行建模的工具。
说的通俗一点,它就是用来描述某个对象,在它所属的生命周期内,所经历的一些状态的变化,也就是状态序列的描述。另外还会描述这个对象是如何响应来自外界的各种事件的。
举例来说,当我们接待客人就餐,一系列流程包括:安排包房、接收点餐、制作菜品、上菜、欢送客人、收拾餐桌...等等状态,这些状态之间的转换的控制、触发的事件监听,我们都可以使用这个框架进行处理。
状态机构成因素
针对状态机,有以下主要的四个要素需要我们留意:现态、条件、动作、次态。
可以简单理解为:“现态”和“条件”是因,“动作”和“次态”是果。
现态
就是指对象当前所处的状态,比如菜品制作。
条件
也可以认为这是一种“事件”。当我们设置的某个条件被满足的时候,框架将会触发一个动作,或者执行一次状态的迁移。比如说菜品制作完成之后上菜。
动作
当上述条件被满足之后所执行的一种操作。
在动作执行完成之后,对象的状态可以迁移到新的状态,但是也可以依旧保持原来的状态。比如说菜品制作完成之后,完全可以由客人决定上菜与否。
另外,动作因素不是必需的。在条件被满足之后,也可以不执行任何动作,而是直接迁移到新的状态。
比如说上菜完成之后,客人可能临时有事,没有吃,直接就走了,进入到“欢送客人”状态。可能不合理,但是这 也是真实可能存在的情况。
次态
次态就是在条件被满足之后,对象需要迁往的新状态。“次态”并不是独立存在的,是相对于“现态”而言的。
于是我们就可以想到,当转移到“次态”之后,这个“次态”就变成了当前对象的“现态”了。
状态机的动作类型
状态机的动作的作用就是用来监听动作,同时响应事件
进入动作
当对象在进入某个状态的时候进行的动作。
退出动作
对象在退出某个状态的时候执行。
输入动作
这个动作依赖于当前状态和输入条件。
转移动作
在进行某两个状态之间的特定转移的时候进行。
总结
这篇文章介绍了要松鼠状态机之前的一些必备的知识。