状态模式
定义
当一个对象的状态发生改变时,允许其改变行为。当一个对象存在多个状态,每种状态之间可以相互转换,并且每种状态对应不同的行为时可以使用状态模式。状态模式将一个对象的多种行为分离开来,并封装到具体的状态类中。它是一种对象行为型模式。
使用场景
状态模式主要适用于当控制一个对象状态转换的条件表达式过于复杂时,把状态判断的逻辑封装到具体状态类中。
结构
抽象状态类(State):定义一个不同状态下的行为方法,由具体的抽象类来实现不同的行为方法。
具体状态类(ConcreteState):实现抽象状态类的抽象方法,并根据环境类中状态类的状态执行不同的行为。
环境类(Context):拥有一个状态属性和抽象状态类,根据状态属性的不同实例化不同的具体状态类。环境类还包括一个唤醒方法用来执行具体状态类的行为。
类图
案例
以一天的工作状态为例,每个时间段有不同的工作状态。
抽象工作状态类
package com.headfirst.statemode.interfaces;
import com.headfirst.statemode.dao.Work;
public interface WorkState {
public void writeP