一、适合场景 :
适合实体在有限的几个状态内切换,状态清晰
二、实质 :包含元素[状态,事件,行为] 不同的状态有不同的行为,状态和行为绑定。如果状态简单可以用if else 进行处理。设置初始状态后,根据不同的事件转到不同的状态
三、角色和结构
(1)环境类角色 :切换策略和状态
(2)抽象角色 :抽象类
(3)具体状态实现角色
四、对比
策略模式区别 :大体上是一样的,都包含 环境角色,抽象角色,具体实现角色。不同的是状态机各个角色之间会进行切换。
五、优点:
代码结构清晰,明确可看出一个实体都有哪些状态和行为,状态之间如何切换
六、缺点:
代码结构会负责,写不好会造成代码复杂。
如果需要增加新的状态就需要改动源代码,开闭关着支持不好。