用途
结构
图-状态模式结构图
State : 定义一个接口以封装与 Context 的一个特定状态相关的行为。 abstract class State { public abstract void Handle(Context context); }ConcreteState : 每一个子类实现一个与 Context 的一个状态相关的行为。
class ConcreteStateA extends State { @Override public void Handle(Context context) { context.SetState( new ConcreteStateB()); } } class ConcreteStateB extends State { @Override public void Handle(Context context) { context.SetState( new ConcreteStateA()); } }Context : 维护一个 ConcreteState 子类的实例,这个实例定义当前的状态。
class Context { private State state; public Context(State state) { this.state = state; } public void SetState(State state) { this.state = state; System.out.println("当前状态:" + state.getClass().getName()); } public State GetState() { return state; } public void Request() { state.Handle( this); } }测试代码
public class StatePattern { public static void main(String[] args) { Context c = new Context( new ConcreteStateA()); c.Request(); c.Request(); } }运行结果
当前状态:ConcreteStateB 当前状态:ConcreteStateA推荐
本文属于 JAVA设计模式系列 。
参考资料
《大话设计模式》
《HeadFirst设计模式》