用于表示状态的接口

public abstract class State {
    public abstract void Handle(Context context);
}

具体的两个状态

/** * 具体状态A */
public class ConcreteStateA extends State {
    private String name;

    @Override
    public void Handle(Context context) {
        context.setState(new ConcreteStateB());
    }

    public ConcreteStateA() {
        this.name = "状态 A";
    }

    public ConcreteStateA(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

/** * 具体状态B */
public class ConcreteStateB extends State {
    private String name;

    @Override
    public void Handle(Context context) {
        context.setState(new ConcreteStateA());
    }

    public ConcreteStateB() {
        this.name = "状态 B";
    }

    public ConcreteStateB(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

上下文

/** * 上下文 */
public class Context {
    private State state;

    public Context(State state) {
        this.state = state;
    }

    /** * 对请求做处理 * 并设置下一状态 */
    public void Request() {
        state.Handle(this);
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
        System.out.println("当前状态: "+state.getClass().getName());
    }


}

测试类

public class Main {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStateA());
        context.Request();
        context.Request();
    }
}