设计模式——状态模式介绍

状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为。它基于对象的内部状态而改变其行为,看起来好像修改了对象的类。

状态模式的关键组件有三个:上下文(Context)、状态(State)和具体状态(Concrete State)。

下面是一个例子来说明状态模式的应用:

java 复制代码
// 抽象状态类
interface State {
    void handle(Context context);
}

// 具体状态类1
class ConcreteState1 implements State {
    public void handle(Context context) {
        System.out.println("当前状态是状态1");
        context.setState(new ConcreteState2()); // 设置下一个状态
    }
}

// 具体状态类2
class ConcreteState2 implements State {
    public void handle(Context context) {
        System.out.println("当前状态是状态2");
        context.setState(new ConcreteState1()); // 设置下一个状态
    }
}

// 上下文类
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);
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建初始状态
        State initialState = new ConcreteState1();
        Context context = new Context(initialState);

        // 发起请求
        context.request(); // 打印"当前状态是状态1"
        context.request(); // 打印"当前状态是状态2"
        context.request(); // 打印"当前状态是状态1"
    }
}

在上述示例中,状态模式被用于管理上下文(Context)对象的不同状态。每个具体状态(Concrete State)都实现了状态(State)接口,并根据需要进行状态转换。上下文类(Context)通过委托给当前状态对象来处理请求,并可以在运行时更改状态。

通过状态模式,客户端代码可以与上下文对象进行交互,而不需要直接处理复杂的状态逻辑。这对于需要根据状态改变行为的场景非常有用,例如自动售货机中的不同状态(待机、售货、缺货等)的管理。

相关推荐
sg_knight3 小时前
Python 设计模式:迭代器模式——用优雅的方式遍历一切
python·设计模式·迭代器模式
阿豪只会阿巴3 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——Turbo Blog 项目学习与上线指南
开发语言·python·学习·状态模式
ximu_polaris8 小时前
设计模式(C++)-行为型模式-解释器模式
c++·设计模式·解释器模式
钝挫力PROGRAMER8 小时前
static final 指向可变集合的设计模式
java·设计模式
镜宇秋霖丶9 小时前
2026.5.7@霖宇博客制作中遇见的问题
状态模式
前端不太难9 小时前
强化用户价值:OpenClaw进化型Agent的产品设计逻辑
状态模式·agent·openclaw
霍格沃兹测试学院-小舟畅学11 小时前
我花一周拆解了企业级Skills库的全套设计模式
人工智能·设计模式
kyriewen1112 小时前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
开发语言·前端·javascript·设计模式·rust·ecmascript·powerpoint
混迹中的咸鱼12 小时前
C++ 23种设计模式
设计模式·c++23
QD_ANJING12 小时前
建议5月的Web前端开发都去飞书上准备面试...
前端·人工智能·面试·职场和发展·前端框架·状态模式·ai编程