设计模式|状态模式

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

代码

public abstract class State {
    public String stateName;
    public abstract void handle(Context context);
}
public class Context {
    private State state;

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

    public void setState(State state) {

        System.out.println("当前状态为: "+this.state.stateName);
        this.state = state;
        System.out.println("状态变更为: "+this.state.stateName);
        System.out.println("--------------------");
    }

    public void request(){
        state.handle(this);
    }
}
public class ConcreteStateA extends State {
    public ConcreteStateA(){
        stateName = "状态A";
    }

    @Override
    public void handle(Context context) {
        context.setState(new ConcreteStateB());
    }
}
public class ConcreteStateB extends State{
    public ConcreteStateB() {
        stateName = "状态B";
    }

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

        context.request();
        context.request();
        context.request();
    }
}

//输出
当前状态为: 状态A
状态变更为: 状态B
--------------------
当前状态为: 状态B
状态变更为: 状态A
--------------------
当前状态为: 状态A
状态变更为: 状态B
--------------------