状态

59 阅读2分钟

状态模式(State Pattern)是一种行为型模式,它允许对象在其内部状态改变时改变其行为。对象的状态可以由外部因素或内部因素改变。

状态模式的主要角色如下:

  • 环境(Context):持有一个状态对象的引用,并将所有与状态相关的操作委派给状态对象。
  • 状态(State):定义了环境对象的不同状态,并提供了与每个状态相关的操作。

状态模式的实现如下:

// 环境
public class Context {
  private State state;

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

  public void setState(State state) {
    this.state = state;
  }

  public void doSomething() {
    state.doSomething();
  }
}

// 状态
public interface State {
  void doSomething();
}

// 具体状态1
public class ConcreteState1 implements State {
  @Override
  public void doSomething() {
    System.out.println("具体状态1的行为");
  }
}

// 具体状态2
public class ConcreteState2 implements State {
  @Override
  public void doSomething() {
    System.out.println("具体状态2的行为");
  }
}

public class Main {
  public static void main(String[] args) {
    // 创建环境
    Context context = new Context(new ConcreteState1());

    // 改变状态
    context.setState(new ConcreteState2());

    // 执行操作
    context.doSomething();
  }
}

输出:

具体状态1的行为
具体状态2的行为

状态模式的优点如下:

  • 将与状态相关的行为集中到状态对象中,提高了系统的可维护性。
  • 简化了环境对象的代码,使环境对象只负责维护状态对象的引用。
  • 提高了系统的灵活性和可扩展性,可以根据需要添加新的状态。

状态模式的应用场景如下:

  • 在系统中存在多个状态,且状态的改变会导致对象的行为改变时。
  • 需要将与状态相关的行为集中到状态对象中时。
  • 需要提高系统的可维护性和灵活性时。

状态模式的注意事项如下:

  • 状态对象的数量不宜过多,否则会导致系统的复杂性增加。
  • 状态对象的接口要设计合理,以便环境对象可以方便地切换状态。