行为型模式之状态模式

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

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

相关推荐
顾漂亮16 小时前
Token快过期的三种续期方案
java·spring·状态模式
造价女工18 小时前
视频监控系统原理与计量
网络·音视频·状态模式·消防·工程造价
暖锋丫2 天前
年会抽奖系统
状态模式
尘似鹤2 天前
设计一个状态机
学习·状态模式·嵌入式软件
Knight_AL3 天前
大文件分片上传:简单案例(前端切割与后端合并)
前端·状态模式
阿珊和她的猫6 天前
深入理解与手写发布订阅模式
开发语言·前端·javascript·vue.js·ecmascript·状态模式
Mr_WangAndy6 天前
C++设计模式_行为型模式_状态模式State
c++·设计模式·状态模式
zl9798997 天前
SpringBoot-依赖管理和自动配置
spring boot·后端·状态模式
Meteors.7 天前
23种设计模式——状态模式(State Pattern)
java·设计模式·状态模式
mit6.82410 天前
[Backstage] 插件架构 | 软件目录 | 实体的生命周期
架构·状态模式