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

本文通过C++代码展示了状态模式的实现,定义了一个上下文(Context)类和两个具体状态类(StartState和StopState),通过虚拟函数doAction切换状态,演示了玩家从开始到停止状态的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、源代码:

#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;
}

二、运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值