【Java】23种设计模式——20.状态模式

定义

状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,使对象看起来似乎修改了它的类。

角色

  1. Context(上下文):维护当前状态,并将请求委托给当前状态对象
  2. State(状态接口):定义状态行为的接口
  3. ConcreteState(具体状态):实现特定状态下的行为

应用场景

  • 对象的行为取决于它的状态,并且必须在运行时根据状态改变行为
  • 需要大量条件语句来判断不同状态下的行为
  • 需要实现状态转换逻辑
  • 需要清晰管理状态转换的场景(如工作流引擎)

使用

  • 上下文

    /**
     * 状态模式:上下文
     * @Author:lyj
     * @Date:2025/5/22 10:17
     */
    public class Context {
        private State currentState ;
    
        public Context(State state)
        {
            this.currentState = state;
        }
    
        /**
         * 设置状态
         * @param state 状态
         */
        public void setState(State state)
        {
            this.currentState = state;
        }
    
        /**
         * 请求状态
         */
        public void request() {
            currentState.handle(this);
        }
    }
    
  • 状态接口

    /**
     * 状态模式:状态接口
     * @Author:lyj
     * @Date:2025/5/22 10:14
     */
    public interface State {
        /**
         * 状态处理
         */
        public void handle(Context context);
    }
    
  • 具体状态

/**
 * 状态模式:具体状态A
 * @Author:lyj
 * @Date:2025/5/22 10:22
 */
public class ConcreteStateA implements State {
    @Override
    public void handle(Context context) {
        System.out.println("当前状态A,将切换到状态B");
        context.setState(new ConcreteStateB());
    }
}
/**
 * 状态模式:具体状态B
 * @Author:lyj
 * @Date:2025/5/22 10:24
 */
public class ConcreteStateB implements State{
    @Override
    public void handle(Context context) {
        System.out.println("当前状态B,将切换到状态A");
        context.setState(new ConcreteStateA());
    }
}

运行客户端:

Context  context = new Context(new ConcreteStateA());
// 多次请求观察状态变化
context.request();      // A→B
context.request();      // B→A
context.request();      // A→B

运行结果:
image

posted @ 2025-06-20 16:59  陆陆无为而治者  阅读(26)  评论(0)    收藏  举报