结构图:
释义:
状态模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。
主要角色
- State(状态接口):定义了一个所有具体状态必须实现的接口,声明了处理状态相关行为的方法。
- ConcreteState(具体状态类):实现状态接口,每一个具体状态类对应于系统中的一个具体状态,它封装了该状态下对象的行为。
- Context(环境/上下文类):维护一个具体状态对象的引用,定义与状态无关的接口,并委托给当前状态对象处理与状态相关的操作。环境类还提供了改变当前状态的方法,以便在状态间转换。
工作原理
- 初始化:环境对象在初始化时会被赋予一个初始状态,这个状态是具体状态类的一个实例。
- 状态转换:当环境对象的内部条件改变时,其状态对象也会随之改变。这种改变通常是通过环境对象调用状态对象的方法来实现的,该方法会返回下一个状态的实例,然后环境对象更新其状态引用。
- 行为委托:环境对象对外提供的所有与状态相关的操作都委托给当前状态对象处理。这意味着实际执行操作的是当前状态对象,环境对象本身并不直接处理这些行为。