美文网首页
有限状态机

有限状态机

作者: Mcq | 来源:发表于2021-03-10 21:05 被阅读0次

有限状态机,一个比较高级的概念,用来解决某些问题实在太好用了。

什么是有限状态机

简单说就是,一个状态数量有限的机器,给机器输入特定的指令,机器会根据预先定义好的规则切换状态。

比如,灯,有两种状态,亮和灭;有两种指令,开和关。
“亮”的状态下,接受“开”的指令,状态切换到“关”;“关”的状态下,接受“开”的指令,状态切换到“开”。

下面是复杂点的灯,红绿灯。

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

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

有限状态机(finite state machine,简称 FSM)

结束状态,根据不同的需求,也可能时空集。

实际业务系统中状态和转换的规则相当复杂,下边时简化的淘宝订单流程,


如果这样复杂的流程控制,简单粗暴的用 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') }
  }
})

相关文章

网友评论

      本文标题:有限状态机

      本文链接:https://www.haomeiwen.com/subject/untwqltx.html