设计模式之状态模式
2021 algorithm状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改它的类。
状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。
有限状态机
有限状态机,英文翻译是 Finite State Machine,缩写为 FSM,简称为状态机。状态机有 3 个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行,动作不是必须的。
相关资料:计算机基础之有限状态机
UML
- Context 上下文是一个类,可以拥有一些内部状态。
- State 接口定义了一个所有具体状态的共同接口;任何状态都实现这个相同的接口,状态之间可以互相替换。
- ConcreteState 具体状态处理来自 Context 的请求。每个ConcreteState 都提供了它对请求的实现。
- 不管什么时候,只要调用 Context.request() 方法,它会被委托到状态来处理。
策略模式
状态模式与策略模式有很大程度的相似。
以状态模式而言,我们将一群行为封装在状态对象中, Context 的行为随时可委托到那些状态对象中的一个。随着时间的流逝,当前状态在状态对象集合中游走改变,以反映出 context 内部状态,因此,context 的行为也会跟着改变。但是 context 的客户对于状态对象了解不多,甚至根本浑然不知。
以策略模式而言,客户通常主动指定 Context 所要组合的策略对象是哪一个。固然策略模式让我们具有弹性,能够在运行时改变策略,但对于某个 Context 对象来说,通常都只有一个最合适的策略对象。
参考链接
- 极客时间:设计模式之美
- 《Head First 设计模式》
- 计算机基础之有限状态机