天天看点

JAVA 设计模式 状态模式

用途

状态模式 (State)

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

状态模式是一种行为型模式。

结构

图-状态模式结构图

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 {

        context.SetState(new ConcreteStateA());

Context : 维护一个 ConcreteState 子类的实例,这个实例定义当前的状态。

class Context {

    private State state;

    public Context(State state) {

        this.state = state;

    public void SetState(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();

运行结果

当前状态:ConcreteStateB

当前状态:ConcreteStateA

推荐

本文属于

JAVA设计模式系列

参考资料

《大话设计模式》

《HeadFirst设计模式》