1. 状态模式基础概念
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为。这种模式将状态相关的行为抽取到独立的状态类中,使得对象可以动态切换行为而无需通过条件语句来判断当前状态。
在C++中实现状态模式通常涉及以下几个核心组件:
- Context(上下文):维护当前状态对象的引用,并将状态相关的请求委托给当前状态对象处理
- State(抽象状态):定义状态接口,声明所有具体状态需要实现的方法
- ConcreteState(具体状态):实现与特定状态相关的行为
提示:状态模式特别适合处理那些包含大量条件分支的状态机代码,它能有效减少if-else或switch-case语句的使用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 状态模式实现细节
2.1 基础类结构设计
首先我们需要定义状态接口和上下文类:
cpp复制class Context; // 前置声明
// 抽象状态类
class State {
protected:
Context* context_; // 反向引用上下文
public:
virtual ~State() = default;
void set_context(Context* context) {
this->context_ = context;
}
// 纯虚函数,定义状态接口
virtual void handleRequest1() = 0;
virtual void handleRequest2() = 0;
};
// 上下文类
class Context {
private:
State* state_; // 当前状态
public:
Context(State* state) : state_(nullptr) {
transitionTo(state);
}
~Context() {
delete state_;
}
// 状态转换方法
void transitionTo(State* state) {
if (state_ != nullptr)
