行为型模式之状态模式

状态模式(State Pattern)

状态模式是一种行为型设计模式,用于实现对象在不同状态下的行为变化。它通过将每个状态封装成一个类,

并在主体对象中维护一个状态对象,来实现对象状态的切换和相应行为的执行。

提供demo版代码更容易理解

java 复制代码
/**
 * @author zhou
 *  状态接口
 */
interface State {
    void handle();
}

/**
 * @author zhou
 *  具体状态类A
 */
class ConcreteStateA implements State {
    public void handle() {
        System.out.println("执行状态A的行为");
    }
}

/**
 * @author zhou
 *  具体状态类B
 */
class ConcreteStateB implements State {
    public void handle() {
        System.out.println("执行状态B的行为");
    }
}

/**
 * @author zhou
 *  上下文类
 */
class Context {
    private State currentState;

    public Context() {
        // 初始状态设置为A
        currentState = new ConcreteStateA();
    }

    public void setState(State state) {
        currentState = state;
    }

    public void request() {
        currentState.handle();
    }
}

/**
 * @author zhou
 *  客户端使用
 */
public class Main {
    public static void main(String[] args) {
        Context context = new Context();

        // 初始状态下执行状态A的行为
        context.request();

        // 将状态切换为B
        context.setState(new ConcreteStateB());

        // 执行状态B的行为
        context.request();
    }
}

我们定义了一个状态接口 State,具体状态类 ConcreteStateA 和 ConcreteStateB 实现了该接口。

上下文类 Context 中维护了一个当前状态对象并提供了切换状态和执行行为的方法。

在 Context 类中,我们首先将初始状态设置为 ConcreteStateA。

setState 方法用于切换状态,request 方法会调用当前状态对象的 handle 方法来执行状态对应的行为。

在 Main 类的 main 方法中,我们创建了一个 Context 对象,并展示了初始状态下执行状态A的行为。

然后通过 setState 方法将状态切换为B,并再次调用 request 方法来执行状态B的行为。
该示例展示了如何使用状态模式来实现对象在不同状态下的行为变化,避免过多的条件判断,

并将状态的处理逻辑封装在各个状态类中,提高了代码的可维护性和扩展性。

相关推荐
阿珊和她的猫4 天前
深入理解与使用 Cookie:Web 开发中的关键机制
前端·状态模式
阿珊和她的猫5 天前
实现网页锚点功能的技术指南
前端·javascript·vue.js·状态模式
驴儿响叮当20105 天前
设计模式之状态模式
设计模式·状态模式
小王不爱笑1325 天前
LangChain4j 项目实战--4:硅谷小智(实现流式输出)
状态模式
茶本无香6 天前
设计模式之十六:状态模式(State Pattern)详解 -优雅地管理对象状态,告别繁琐的条件判断
java·设计模式·状态模式
木斯佳7 天前
前端八股文面经大全:字节跳动前端一面(2025-10-09)·面经深度解析
前端·状态模式
山北雨夜漫步9 天前
点评Day06 剩下的卡拉米,我不都写,只写一些新奇的
状态模式
木斯佳9 天前
前端八股文面经大全:京东零售前端实习一面(2026-1-20)·面经深度解析
前端·状态模式·零售
木斯佳10 天前
前端八股文面经大全:字节前端一面(2026-2-1)·面经深度解析
前端·状态模式
前端不太难10 天前
Flutter 页面切换后为什么会“状态丢失”或“状态常驻”?
flutter·状态模式