5 Machine State 状态机模式 Pattern 设计模式 (5码赤)
本文目录导航:
设计模式(5)|状态机模式(State Machine Pattern)
状态机模式,作为行为型设计模式之一,旨在描述对象随其内部状态改变而呈现的不同行为。
在这一模式中,对象的行为取决于其当前状态,且状态间的转换规则定义明确。
此模式的核心在于解耦对象行为与其状态,便于管理和维护复杂系统。
尤其在系统具备多样状态和复杂状态转换逻辑时,状态机模式能简化设计与实现。
应用状态机模式时,需遵循以下步骤以确保设计逻辑清晰,满足预期需求:遵循这些步骤能帮助开发者在设计与实现过程中保持清晰思路,确保最终系统的功能与性能达到预期。
状态机模式在多个领域广泛适用,涵盖但不限于:状态机模式广泛应用于描述系统随时间与外部条件变化而演变的行为模式。
通过分解系统为一组状态与状态转换规则,状态机模式能清晰展示系统行为,助力复杂系统的控制与管理。
面试中,状态机相关问题可能涉及:通过理解这些问题及答案,能更好地掌握状态机模式,并展示其在实际项目中的应用与优势。

Unity设计模式-状态模式
假设我们要开发一款RTS游戏,需要编写一个我方单位的逻辑。
从上面的判断逻辑来看,内容较为复杂,我们先使用伪代码来实现单位的控制脚本。
这仅仅是我方单位的几个基本行为,若后续添加巡逻、警戒、探索等逻辑,这个Update方法将变得更加庞大和复杂,难以维护。
在这种情况下,我们引入状态模式,根据上述逻辑将单位分为待机、移动、攻击三种状态。
我们将三种状态的Update方法分开实现。
接下来是状态的管理和切换,我们编写一个基类,让三个状态类继承自该类,并重写其Update方法。
通过切换当前状态对象来切换单位的状态。
将复杂的逻辑判断拆分到不同的状态中,单位控制器只需维护一个状态对象的列表。
状态模式定义:当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
我们通过切换并更新当前的状态对象,切换了控制器的行为,使得控制器看起来像是改变了。
在Unity中,我们可以使用状态模式创建一个简单易用的状态机。
首先定义一个状态接口,包括进入、更新、离开方法。
然后是状态机类,用于维护一个状态列表,添加、移除、转换状态。
状态模式在游戏中非常常用,可以用于维护角色控制器,制作AI等。
它可以将与状态相关的行为局部化,将逻辑拆分成小块,使代码更加清晰易读。
参考资料:《HeadFirst-设计模式》《大话设计模式》
怎样设计自动机
状态机模式是一种行为模式,在《设计模式》这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑。
近日在看了一个开源系统时,看到了一个状态机的实现,也学着写了一个,与大家分享。
首先,分析一下一个普通的状态机究竟要实现哪些内容。
状态机存储从开始时刻到现在的变化,并根据当前输入,决定下一个状态。
这意味着,状态机要存储状态、获得输入(我们把它叫做跳转条件)、做出响应。
如上图所示,{s1, s2, s3}均为状态,箭头c1/a1表示在s1状态、输入为c1时,跳转到s2,并进行a1操作。
最下方为一组输入,状态机应做出如下反应:当前状态输入下一个状态动作s1c1s2a1s2c2s3a2s3c1s2a3s2c2s3a2s3c1s2a3s2c1s_trapa_traps_trapc1s_trapa_trap 当某个状态遇到不能识别的输入时,就默认进入陷阱状态,在陷阱状态中,不论遇到怎样的输入都不能跳出。
为了表达上面这个自动机,我们定义它们的状态和输入类型: