状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改它的类。

状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。

有限状态机

有限状态机,英文翻译是 Finite State Machine,缩写为 FSM,简称为状态机。状态机有 3 个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transition Condition)。事件触发状态的转移及动作的执行,动作不是必须的。

相关资料:计算机基础之有限状态机

UML

状态模式UML

  • Context 上下文是一个类,可以拥有一些内部状态。
  • State 接口定义了一个所有具体状态的共同接口;任何状态都实现这个相同的接口,状态之间可以互相替换。
  • ConcreteState 具体状态处理来自 Context 的请求。每个ConcreteState 都提供了它对请求的实现。
  • 不管什么时候,只要调用 Context.request() 方法,它会被委托到状态来处理。

策略模式

状态模式与策略模式有很大程度的相似。

以状态模式而言,我们将一群行为封装在状态对象中, Context 的行为随时可委托到那些状态对象中的一个。随着时间的流逝,当前状态在状态对象集合中游走改变,以反映出 context 内部状态,因此,context 的行为也会跟着改变。但是 context 的客户对于状态对象了解不多,甚至根本浑然不知。

以策略模式而言,客户通常主动指定 Context 所要组合的策略对象是哪一个。固然策略模式让我们具有弹性,能够在运行时改变策略,但对于某个 Context 对象来说,通常都只有一个最合适的策略对象。

参考链接