状态模式
1. 环境
- 实现一个旅馆的住宿管理系统
- 房间的状态有三种:空闲,预定,入住
2. 问题
- 背景:某对象发生变化时,其所能做的操作也随之变化。
- 应用程序的可维护性和重用性差。
- 代码的逻辑较复杂。
3. 详解
3.1. state模式
允许对象在其内部状态改变的时候改变它的行为。
角色
- 环境类(Context): 客户使用的对象类。维护一个State子类的实例,这个实例定义当前状态。
- 抽象状态类(State): 定义一个接口以封装与Context的一个特定状态相关的行为。
- 具体状态类(ConcreteState): 每一子类实现一个与Context的一个状态相关的行为。

4. 实现
4.1. 最常见的一种步骤
- 定义状态类接口,实现当前系统的真实状态实现此接口
- 定义Context类,具有状态的类,其中包含状态类接口的对象
- 当Context类执行某个接口的方法时,去调用真实状态类的实现方法
- 当Context类修改状态时,修改Context类的真实状态对象