Linux C++ 055-设计模式之状态模式
状态模式是一种行为型模式,它允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。在C++中,我们可以使用继承和多态来实现状态模式。
以下是一个简单的状态模式的实现:
#include <iostream>
using namespace std;
// 抽象状态类
class State {
public:
virtual void handle(Context* context) = 0;
};
// 具体状态A
class ConcreteStateA : public State {
public:
void handle(Context* context) override {
cout << "当前状态是 A." << endl;
// 可以进行一些状态处理
// ...
// 切换到状态B
context->setState(new ConcreteStateB());
}
};
// 具体状态B
class ConcreteStateB : public State {
public:
void handle(Context* context) override {
cout << "当前状态是 B." << endl;
// 可以进行一些状态处理
// ...
// 切换到状态A
context->setState(new ConcreteStateA());
}
};
// 环境类
class Context {
private:
State* state;
public:
Context() {
state = new ConcreteStateA(); // 初始状态为 A
}
void request() {
state->handle(this);
}
void setState(State* s) {
delete state; // 删除旧状态
state = s; // 设置新状态
}
~Context() {
delete state; // 析构时删除状态
}
};
int main() {
Context* context = new Context();
// 状态处理请求
context->request();
context->request();
context->request();
delete context;
return 0;
}
这个例子中,我们定义了一个Context
类作为环境类,它有一个state
成员来保存当前的状态。State
是一个抽象类,所有具体状态类(如ConcreteStateA
和ConcreteStateB
)都从它继承。request
方法会委托当前状态对象去处理请求,可能会导致状态切换。
当我们运行这个程序时,会看到状态在A和B之间切换,每次切换都是由上下文环境根据当前状态处理的结果来决定的。这就是状态模式的一个简单示例。
评论已关闭