在软件开发过程中,应用程序中的部分对象可能会根据不同的情况作出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。
状态模式:对有状态的对象,把复杂的"判断逻辑"(通常使用switch…case结构)提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。
状态模式属于一种对象行为型模式。
主要优点:
主要角色:
UML图如下:
示例代码:
// 环境类 class Context { private State state; // 定义环境类的初始状态 public Context() { this.state = state; } // 设置新状态 public void setState(State state) { this.state = state; } // 读取状态 public State getState() { return state; } // 对请求做处理 public void Handle() { state.Handle(this); } } // 抽象状态类 abstract class State { public abstract void Handle(Context context); } // 具体状态类A class ConcreteStateA extends State { public void Handle(Context context) { System.out.println("当前状态是A."); context.setState(new ConcreteStateB()); } } // 具体状态类B class ConcreteStateB extends State { public void Handle(Context context) { System.out.println("当前状态是B."); context.setState(new ConcreteStateA()); } } // 客户类 public class Client { public static void main(String[] args) { Context context = new Context(); // 创建环境 context.Handle(); // 处理请求,进行状态切换 context.Handle(); context.Handle(); context.Handle(); } }