Skip to content

状态模式

基础概念

什么是状态模式?

答案: 状态模式(State Pattern)允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

使用场景

  • 对象的行为依赖于它的状态
  • 代码中包含大量与状态有关的条件语句

优点

  • 封装状态转换规则
  • 将状态转换显式化
  • 状态对象可以共享

缺点

  • 增加系统类和对象的个数
  • 结构和实现较为复杂

实现方式

java
// 状态接口
public interface State {
    void handle(Context context);
}

// 具体状态A
public class ConcreteStateA implements State {
    @Override
    public void handle(Context context) {
        System.out.println("状态A处理");
        context.setState(new ConcreteStateB());
    }
}

// 具体状态B
public class ConcreteStateB implements State {
    @Override
    public void handle(Context context) {
        System.out.println("状态B处理");
        context.setState(new ConcreteStateA());
    }
}

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

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

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

    public void request() {
        state.handle(this);
    }
}

// 使用(订单状态)
Context context = new Context(new ConcreteStateA());
context.request();  // 状态A → 状态B
context.request();  // 状态B → 状态A

练习题

  1. 状态模式和策略模式的区别?
  2. 状态模式的应用场景?
  3. 如何实现状态的持久化?

Released under the MIT License.