什么是状态模式

对象根据不同的情况做出不同的行为,即不同状态下触发不同的行为,类的行为是基于它的状态改变的。
状态一般是动态增删的,不是固定的,所以无法用if…else提前写死。

适用场景

  1. 动态的状态,非固定值
  2. 状态的变化会触发不同的行为

    代码实现

    状态模式包含以下主要角色。

  3. 环境类(Context)角色:也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。

  4. 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。
  5. 具体状态(Concrete State)角色:实现抽象状态所对应的行为,并且在需要的情况下进行状态切换。 ```java /**
    • 抽象状态类 */ abstract class State { public abstract void handle(Context context); }

/**

  • 具体状态A */ class StateA extends State { @Override public void handle(Context context) {
    1. System.out.println("当前状态是A");
    } }

/**

  • 具体状态B */ class StateB extends State { @Override public void handle(Context context) {
    1. System.out.println("当前状态是B");
    } }

/**

  • 环境类 */ class Context { private State state;

    public Context() { }

    //设置新状态 public void setState(State state) {

    1. this.state = state;

    }

    //读取状态 public State getState() {

    1. return this.state;

    }

    //对请求做处理 public void handle() {

    1. state.handle(this);

    } }

/**

  • 状态模式测试类 */ public class StatePattern { public static void main(String[] args) {

    1. //创建环境
    2. Context context = new Context();
    3. State a = new StateA();
    4. context.setState(a);
    5. context.handle();
    6. State b = new StateB();
    7. context.setState(b);
    8. context.handle();
    9. //输出:
    10. //当前状态是A
    11. //当前状态是B

    } } ```