有限状态机,一个比较高级的概念,用来解决某些问题实在太好用了。
什么是有限状态机
简单说就是,一个状态数量有限的机器,给机器输入特定的指令,机器会根据预先定义好的规则切换状态。
比如,灯,有两种状态,亮和灭;有两种指令,开和关。
“亮”的状态下,接受“开”的指令,状态切换到“关”;“关”的状态下,接受“开”的指令,状态切换到“开”。

下面是复杂点的灯,红绿灯。
状态:绿,黄,红;
状态转换规则:绿只能转黄,黄只能转红,红只能转绿;其他状态间的状态转换时不允许的;
指令:接收到 1 就转换到下一个状态。

下面是有限状态机的抽象概念

结束状态,根据不同的需求,也可能时空集。
实际业务系统中状态和转换的规则相当复杂,下边时简化的淘宝订单流程,

如果这样复杂的流程控制,简单粗暴的用 if else
来写,代码会非常的复杂,且难以维护和扩展,而利用有限状态机就容易编写易于维护的代码。
各种语言都有自己对应的有限状态机实现,用于处理这种复杂逻辑,Javascript Finite State Machine是一个优秀的库。
const StateMachine = require('javascript-state-machine')
const fsm = new StateMachine({
init: 'solid',
transitions: [
{ name: 'melt', from: 'solid', to: 'liquid' },
{ name: 'freeze', from: 'liquid', to: 'solid' },
{ name: 'vaporize', from: 'liquid', to: 'gas' },
{ name: 'condense', from: 'gas', to: 'liquid' }
],
methods: {
onMelt () { console.log('I melted') },
onFreeze () { console.log('I froze') },
onVaporize () { console.log('I vaporized') },
onCondense () { console.log('I condensed') }
}
})
网友评论