行为型模式之状态模式

状态模式(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的行为。
该示例展示了如何使用状态模式来实现对象在不同状态下的行为变化,避免过多的条件判断,

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

相关推荐
小马不起床5 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
shmily麻瓜小菜鸡12 小时前
前端实现图片与PDF文字识别敏感信息打码方案
前端·pdf·状态模式
青企通14 小时前
APP 开发成本估算:从需求到上架的完整拆解与工作量模型
产品运营·状态模式
for_ever_love__14 小时前
LangGraph State 设计:多节点之间怎么安全地共享数据
redis·mysql·状态模式·checkpoint·state·状态图·langgraph
小马不起床16 小时前
零基础玩转 FastAPI_12:前端详情增强与角色权限分配
前端·状态模式·fastapi
cheems952717 小时前
从统一响应到 Swagger:一篇讲清微服务接口文档设计未命名
java·微服务·架构·状态模式
小马不起床18 小时前
零基础玩转 FastAPI_10:前端登录、权限与布局
前端·状态模式·fastapi
星恒随风18 小时前
Linux进程信号(一):从Ctrl+C到kill、raise、alarm,深入理解信号的概念与产生原理
linux·c语言·笔记·学习·状态模式
小马不起床1 天前
零基础玩转 FastAPI_09:前端基础工程构建
前端·状态模式·fastapi
希洛兔1 天前
状态模式详解:让对象随内部状态自动改变行为
java·设计模式·状态模式