State 状态模式

2019-03-25  本文已影响0人  szn好色仙人

动机

定义

要点

示例

#include <cstdio>

class CBaseState
{
public:
    CBaseState() : pNext_(nullptr) {}
    virtual ~CBaseState() {}
    
    virtual void Deal() = 0;
    CBaseState* GetNext() { return this->pNext_; }

protected:
    CBaseState* pNext_;
};

class CState0 : public CBaseState
{
public:
    virtual void Deal();
};
class CState1 : public CBaseState
{
public:
    virtual void Deal();
};
class CState2 : public CBaseState
{
public:
    virtual void Deal();
};

void CState0::Deal()
{
    printf("State0 Deal\n");
    this->pNext_ = new CState1;
}
void CState1::Deal()
{
    printf("State1 Deal\n");
    this->pNext_ = new CState2;
}
void CState2::Deal()
{
    printf("State2 Deal\n");
    delete this->pNext_;
    this->pNext_ = nullptr;
}

class CTest
{
public:
    CTest(CBaseState* pState) : pState_(pState) {}

    void DealState()
    {
        pState_->Deal();
        pState_ = pState_->GetNext();
    }

private:
    CBaseState* pState_;
};

int main()
{
    CTest Test0(new CState0);
    Test0.DealState();
    Test0.DealState();
    Test0.DealState();
    /*
    State0 Deal
    State1 Deal
    State2 Deal
    */

    CTest Test1(new CState1);
    Test1.DealState();
    Test1.DealState();
    /*
    State1 Deal
    State2 Deal
    */

    return 0;
}

https://www.bilibili.com/video/av24176315/?p=18

上一篇 下一篇

猜你喜欢

热点阅读