状态模式

1. 环境

  • 实现一个旅馆的住宿管理系统
  • 房间的状态有三种:空闲,预定,入住

2. 问题

  • 背景:某对象发生变化时,其所能做的操作也随之变化。
  • 应用程序的可维护性和重用性差
  • 代码的逻辑较复杂

3. 详解

3.1. state模式

允许对象在其内部状态改变的时候改变它的行为

角色

  • 环境类(Context): 客户使用的对象类。维护一个State子类的实例,这个实例定义当前状态。
  • 抽象状态类(State): 定义一个接口以封装与Context的一个特定状态相关的行为。
  • 具体状态类(ConcreteState): 每一子类实现一个与Context的一个状态相关的行为。
staterole
图:staterole

4. 实现

4.1. 最常见的一种步骤

  • 定义状态类接口,实现当前系统的真实状态实现此接口
  • 定义Context类,具有状态的类,其中包含状态类接口的对象
  • 当Context类执行某个接口的方法时,去调用真实状态类的实现方法
  • 当Context类修改状态时,修改Context类的真实状态对象
© 2019 冯世祺. All rights reserved.