状态机入门:从定义到使用

4 评论 28501 浏览 138 收藏 8 分钟

状态机是什么?状态机应该如何去应用呢?状态机可以对业务状态进行梳理,一目了然,之后可以根据业务场景不断增加。

在工作过程中,意外接触了一个词——“状态机”,这是个什么意思,可以为我们做产品提供怎样的用处?

作为产品,为什么需要学习状态机呢?

在刚进入公司的时候,根据公司产品做流程图的时候,发现自己经常会漏了这样或那样的状态,导致整体流程会有问题。后来知道了状态机这样的东西,发现用这幅图就可以很清晰的表达整个状态的流转。当然这个不是做好一款产品的必备品,但是却可以让你更加轻松的同技术等人员交流。

一、什么是状态机?

就是就是状态转移图。

如果流程围绕某个事物的状态变化进行,显而易见,该轮到状态机图上场了。一个状态机图中只描述一个事物,该事物有多个状态,不同的动作作用到状态上导致状态的转换。

举个最简单的例子:

人有三个状态:健康、感冒、康复中。

触发的条件有淋雨(t1)、吃药(t2)、打针(t3)、休息(t4)。

所以状态机就是健康->(t4)->健康;健康->(t1)->感冒;感冒->(t3)->健康;感冒->(t2)->康复中;康复中->(t4)->健康等等。就是这样状态在不同的条件下,跳转到自己或不同状态的图。

状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果

详解如下:

  1. 现态:是指当前所处的状态。
  2. 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
  3. 动作:条件满足后执行的动作,动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
  4. 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

在了解关于状态机的文章后,结合自己的平时的学习总结,我发现:在平时的业务过程中,判断即对应状态机理论中的条件,我们做什么操作改变状态即理论中的动作,同时状态必须要有始有终,否则会出现状态卡住,无法继续正常推进。

状态机的开始一般用空心圆表示,代表状态图的起始位置。

结尾一般用实心圆点表示,是一个状态的终止点。

二、那么状态机怎样去应用呢?

以物理课学的灯泡图为例:就是一个最基本的小型状态机,这个例子人人里的很多大神都已经举过了,这里就简单说下。

这里就是两个状态:①打开开关,灯泡亮;②关闭开关,灯泡灭。

可以画出以下的状态机图:

如果进度卡住,该怎么办?

这里有个比较形象的案例就是淘宝的自动确认收货,卖家发货后状态变为待收货,若买家迟迟不点确认收货的话,那么流程就停止在这里,卖家也迟迟收不到货款。

因此,在这里,淘宝做了一个条件,判断时间是否达到15天,如果达到15天,做出确认收货的动作,使得状态得到流转。

以小灯泡为例:假设为了节约,小灯泡开了超过8个小时就自动关闭,除非再次做打开开关的操作,画出此时的状态机图如下:

同样的状态判断应用了很多场景,例如:患者购买服务或商品时,订单由待支付-已支付的状态中的通过时间条件来实现状态得到继续流转。

但是,判断不是状态机必要的,如:正常小灯泡的两种状态,可以不需要经过判断。起始和终止状态可能是相同的,也可能是不同的,即同一种状态可能是起始状态,也可能为终止状态。

在这里以外卖app为例:制作了一个订单的简单的状态机图,以订单的状态变更推动。

三、总结

新入门时,对状态机和业务流程图总是傻傻分不清楚,因此对于状态机和流程图进行了了解和归纳。

总的来说,状态机图和业务流程图有些类似,但是又有不同:

  • 两者是两种不同的思维方式;
  • 两者思考的出发点不一样,因而两者所表达的目的也是不同的;
  • 两者的各个节点都是不同的,流程图为动作,状态机为状态。

一般情况下,我们使用的均为有限状态机。状态机可以对业务状态进行梳理,一目了然,之后可以根据业务场景不断增加。

同时,使用状态机和相关人员,尤其是开发,进行表达时,也可以更加清晰,提升沟通效率。

 

本文由@卉子酱 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自 Pexels,基于 CC0 协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 明白了

    回复
  2. 流程图的流程节点用直角边的矩形表示,而且只能由一个箭头输出。
    状态图的状态是圆角的矩形表示,可以有多个箭头输出。
    如果你都用直角边的矩形表示,那自然傻傻分不清楚了。
    最下面的图画得也很有问题,很多箭头上没有动作,4要素的“条件”和“动作”呢?
    比如退款失败->待商家确认,退款成功->订单关闭,两处都没有动作,请问退款成功状态转移到订单关闭状态是否自动,如果自动为什么要多设置一个状态,有何意义?如果不自动需要手动,那么这个动作谁来做?又是什么动作。

    来自浙江 回复
  3. 很实用

    来自上海 回复
  4. 状态机还有另外一种表现方式,类似于表格。可以了解一下

    回复