状态模式是什么?

一、代码

#include <iostream>
using namespace std;

class Context;
class State {
public:
    virtual void handle(Context* pContext) = 0;
    virtual void myState() = 0;
};

class ConcreteStateA : public State {
public:
    void handle(Context* pContext);
    void myState() { cout << "ConcreteStateA" << endl; }
};
class ConcreteStateB : public State {
public:
    void handle(Context* pContext);
    void myState() { cout << "ConcreteStateB" << endl; }
};

class ConcreteStateC : public State {
public:
    void handle(Context* pContext);
    void myState() { cout << "ConcreteStateA" << endl; }
};

class Context {
public:
    Context(State* pState) :_State(pState) {};
    void Request() { _State->myState(); }
    void ChangeState(State* pState) { _State = pState; };
private:
    State* _State;
};

void ConcreteStateA::handle(Context* pContext) {
    cout << "ConcreteStateA" << endl;
    pContext->ChangeState(new ConcreteStateB());
}

void ConcreteStateB::handle(Context* pContext) {
    cout << "ConcreteStateB" << endl;
    pContext->ChangeState(new ConcreteStateC());
}

void ConcreteStateC::handle(Context* pContext) {
    cout << "ConcreteStateC" << endl;
    pContext->ChangeState(new ConcreteStateA());
}

int main() {
    State* stA = new ConcreteStateA();
    Context* con = new Context(stA);
    stA->handle(con);
    con->Request();
}

二、具体解释

状态模式是策略模式的变体,把状态State抽象出来了,然后把状态对应的动作抽象出来为Context类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值