设计模式(019)行为型之状态模式

状态模式是一种行为型设计模式,它允许对象在内部状态发生变化时改变它的行为,使得对象在不同状态下有不同的行为表现,而且可以方便地添加新的状态而不必修改已有的代码。

1、场景设计

实现场景:对状态A和状态B做出不同的处理。

2、C++实现

`State` 是一个抽象基类,定义了状态的接口。`ConcreteStateA` 和 `ConcreteStateB` 分别是具体的状态类,实现了 `State` 接口。`Context` 类维护一个状态成员,可以在不同的状态下执行不同的行为。

cpp 复制代码
#include <iostream>

// 状态基类
class State {
    public:
        virtual void handle() = 0;
};

// 具体状态类A
class ConcreteStateA : public State {
    public:
        void handle() override {
            std::cout << "Handling state A" << std::endl;
        }
};

// 具体状态类B
class ConcreteStateB : public State {
    public:
        void handle() override {
            std::cout << "Handling state B" << std::endl;
        }
};

// 上下文类,维护一个状态成员,并在不同状态下执行不同的行为
class Context {
    private:
        State* state;

    public:
        Context(State* initial) : state(initial) {}

        void setState(State* newState) {
            state = newState;
        }

        void request() {
            state->handle();
        }
};

int main() {
    ConcreteStateA stateA;
    ConcreteStateB stateB;

    Context context(&stateA);
    context.request();

    context.setState(&stateB);
    context.request();

    return 0;
}

3、Java实现

`State` 接口定义了状态的行为。`ConcreteStateA` 和 `ConcreteStateB` 是具体的状态类,分别实现了 `State` 接口。`Context` 类维护一个状态成员,可以在不同的状态下执行不同的行为。在 `Main` 类中,我们创建了两个具体状态类的实例,并在 `Context` 中进行状态切换,并观察不同状态下的行为表现。

java 复制代码
package behavioralpattern.state;

// 状态接口
interface State {
    void handle();
}

// 具体状态类A
class ConcreteStateA implements State {
    @Override
    public void handle() {
        System.out.println("Handling state A");
    }
}

// 具体状态类B
class ConcreteStateB implements State {
    @Override
    public void handle() {
        System.out.println("Handling state B");
    }
}

// 上下文类,维护一个状态成员,并在不同状态下执行不同的行为
class Context {
    private State state;

    public Context(State initialState) {
        this.state = initialState;
    }

    public void setState(State newState) {
        this.state = newState;
    }

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

public class StateDemo {
    public static void main(String[] args) {
        ConcreteStateA stateA = new ConcreteStateA();
        ConcreteStateB stateB = new ConcreteStateB();

        Context context = new Context(stateA);
        context.request();

        context.setState(stateB);
        context.request();
    }
}
相关推荐
星恒随风1 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
艾利克斯冰1 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
星心源七境6 小时前
七境体系全解析:从六韬兵法到AI锁颜,一套贯穿古典智慧与现代应用的成长操作系统
人工智能·设计模式·设计
码农飞哥7 小时前
Spring Boot 多角色权限隔离实战:接口层+路由层+UI层三层防御,杜绝生产数据泄露
spring boot·状态模式·架构设计·系统设计·权限控制
qq_297574677 小时前
设计模式系列文章(基础篇第21篇):迭代器模式——遍历聚合解耦,实现统一迭代访问
设计模式·迭代器模式
147API8 小时前
Claude Fable 5 接入拆解:从 Messages API 到 fallback 要改哪些地方
状态模式·claude·fable5
禅思院9 小时前
前端请求取消与调度完全指南:从 AbortController 到企业级优先级架构
前端·设计模式·前端框架
小bo波10 小时前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
写代码的小阿帆11 小时前
行为型设计模式之观察者(发布-订阅)模式
设计模式
王_teacher11 小时前
23种设计模式全解析(GoF 设计模式)
设计模式·软考·软件设计师·软考中级