一、源代码:

#include<iostream>
#include<memory>

using namespace std;

class State;
class Context
{
public:
    Context()
    {
        this->_state = nullptr;
    }
    void setState(shared_ptr<State> state)
    {
        this->_state = state;
    }
    shared_ptr<State> getState()
    {
        return _state;
    }
private:
    shared_ptr<State> _state;
};

class State
{
public:
    virtual void doAction(shared_ptr<Context> context) = 0;
    virtual ~State() = default;
};

class StartState:public State
{
public:
    virtual void doAction(shared_ptr<Context> context) override
    {
        cout<<"Player is in start state"<<endl;
        context->setState(make_shared<StartState>(*this));
    }
    string toString()
    {
        return "  Start State";
    }
};

class StopState:public State
{
public:
    virtual void doAction(shared_ptr<Context> context) override
    {
        cout<<"Player is in stop state"<<endl;
        context->setState(make_shared<StopState>(*this));
    }
    string toString()
    {
        return "  Stop State";
    }
};

int main()
{
    shared_ptr<Context> context = make_shared<Context>();

    shared_ptr<State> startState = make_shared<StartState>();
    startState->doAction(context);
    cout<<(dynamic_pointer_cast<StartState>(context->getState()))->toString()<<endl;

    shared_ptr<State> stopState = make_shared<StopState>();
    stopState->doAction(context);
    cout<<(dynamic_pointer_cast<StopState>(context->getState()))->toString()<<endl;
}

二、运行结果:

C++设计模式:状态模式

相关文章: