【设计模式】状态模式和状态机的区别和联系

大多数资料、文章,都没有解释状态模式和状态机的关系,而是将这两个词混淆着使用。如果你有这方面的疑惑,希望本文能给你带来帮助。如果有描述不当的地方,也请帮忙指正

以下并不涉及状态模式/状态机的基础内容

一个比较好的,对该问题进行的讨论

状态模式:一种程序设计模式

状态机:通常指FSM(有限状态机),是一个数学模型,是一种抽象机器,用state diagram(状态图、状态转换图)表示

ps:就像"行为树"也是一个数学模型,是一种抽象树

状态图就是这样的图
(图片出处)
在这里插入图片描述
(图片出处)
在这里插入图片描述

数学领域中的状态机

  • 状态机如同大多数数学模型一样,并不是编程领域特有的名词,而是为了解决某些问题而提出的数学模型
  • 状态机描述了在任何给定时间都处于某一个状态的计算机,它可以响应某些输入/触发/事件而从一种状态更改为另一种状态,它的关注点是状态及其转换
  • 许多工程和数学专业的学生已经了解了状态机,但他们在编程领域几乎没有受过教育,在他们看来,状态机是一个用"状态图"表示的数学模型、抽象机器。

编程领域中的状态模式

  • 状态模式是编程领域特有的名词,是一种设计模式。设计模式是为了更好地规范代码设计结构,以便于封装、复用、易于扩展;其中状态模式用来解决 对象根据自己的状态来展现出不同的行为
  • 状态模式是状态机的一种实现方式,但通常都是以状态模式的思路来实现状态机
  • 很多文章(尤其是国内博文)经常都把这两个词混淆使用,也完全可以理解。因为当你要用状态模式实现一个功能的时候,这个功能结构肯定不适合被称为"状态模式",而更适合称为"状态机"。这只是一个词性的区别,就像"一碗米饭"要"用碗盛"一样。
  • 然而状态模式和状态机的存在着很强的关联性,就像"一碗米饭"必须"用碗盛"一样,目前没看到有其它好的实现方式
  • 所以有些程序员认为状态机是"运行中的状态模式",这无可厚非

二者正确的关系是:假设需要开发一个上面状态图展示的糖果机程序,那么应该由产品经理绘制这个状态图来描述该状态机,然后交由程序员进行实现。程序员实现这个状态机的方式可能有很多,而最理想的方式就是状态模式。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值