设计模式(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();
    }
}
相关推荐
勤奋的知更鸟10 天前
Java 编程之责任链模式
java·开发语言·设计模式·责任链模式
逆袭的菜鸟X10 天前
JS常用设计模式汇总
开发语言·javascript·设计模式
uplinker10 天前
设计模式-三大工厂
java·开发语言·设计模式
像污秽一样10 天前
软件设计模式期末复习模拟解析
java·设计模式·软件设计模式·复习·java设计模式
SoFlu软件机器人10 天前
AI 领航设计模式学习:飞算 JavaAI 解锁单例模式实践新路径
学习·单例模式·设计模式
尤物程序猿10 天前
设计模式之手写策略模式实现动态支付(Java实现)
java·设计模式·策略模式
极地星光10 天前
设计模式(C++/Qt)-工厂模式
c++·qt·设计模式
勤奋的知更鸟10 天前
Java 编程之命令模式
java·开发语言·设计模式·命令模式
charlie11451419110 天前
从C++编程入手设计模式——命令模式
c++·设计模式·命令模式
剁椒豆腐脑11 天前
阶段二JavaSE进阶阶段之设计模式&继承 2.2
java·设计模式·跳槽·学习方法·改行学it