状态机初探
何为状态机
状态机(State Machine),顾名思义,是一种带有状态的机器。可以用于抽象程序世界乃至真实世界中带有状态的现象。
哪些是状态机
真实世界
- 门
- 状态:已开启(opened)、已关闭(closed)
- 状态转义函数:开门(openDoor)、关门(closeDoor)
- 通常状态转义函数的参数是状态转移的条件,如已开启时我们才能关门,因此参数是开启状态
- 通常函数的返回值就是新的状态,如原本已开启的门,通过关门的动作最终使得门变成已关闭
- 计算机
- 空调
- 咖啡机
- ...所有有状态的机器
程序世界
-
正则表达式的底层实现就是一个状态机
正则表达式
/^a+$/如何匹配字符串aaaaaaa呢?实际上,我们正则表达式的底层实现中,是将字符串的每一个字符都喂给一个状态机,当状态机发现传入的字符是a则继续等待下一个字符进入,直到所有字符串都匹配完成则匹配成功或者遇到一个非a字符则匹配失败。这一个状态机接受字符,返回值是匹配成功与匹配失败的新状态。 -
Vuex通过action将一个状态改变成另一个状态
-
经典的字符串匹配算法
Shift-And和KMP算法本质上也是一个状态机 -
...