设计模式之状态模式

最近研究红外探测器建模仿真时,了解到它有多种工作状态,在不同工作状态下有不同的探测能力,很适合用设计模式中的状态模式进行建模仿真。因此,学习一下设计模式中行为型模式之状态模式。

定义

在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。

在UML中可以使用状态图来描述对象状态的变化。

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automation,缩写:FSA),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。

状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作:

  • 进入动作(entry action):在进入状态时进行
  • 退出动作(exit action):在退出状态时进行
  • 输入动作:依赖于当前状态和输入条件进行
  • 转移动作:在进行特定转移时进行

Moore状态机:输出仅仅与当前状态有关;

Mealy状态机:输出不仅取决于当前状态,还和输入有关;

结构

状态模式包含如下角色:

  • Context: 环境类
  • State: 抽象状态类
  • ConcreteState: 具体状态类

参考链接

  1. 软件设计模式简介,by jackhuang.
  2. 图说设计模式-状态模式,by me115.
  3. 有限状态机,by wikipedia.
  4. 理解状态机,by 纸上浅谈.
  5. 深入浅出理解有限状态机,by 我是云峰小罗.
  6. JavaScript与有限状态机,by ruanyifeng.
  7. Moore状态机和Mealy状态机的区别,by Reborn Lee.
  8. C++各类设计模式及实现详解,by linux.