美文网首页
State 状态模式

State 状态模式

作者: szn好色仙人 | 来源:发表于2019-03-25 20:42 被阅读0次

动机

  • 在软件构件过程中,某些对象的状态如果改变,其行为也随之发生变化

定义

  • 允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为

要点

  • State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦
  • 为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以保证不会出现状态不一致的情况

示例

#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

相关文章

  • State模式

    状态模式(State模式) 定义 状态模式,又称状态对象模式(Pattern of Objects for S...

  • State状态模式

    状态模式的核心是将状态抽象为类,然后将状态的改变包含在类中,这样就避免了在client中写出大量的if...els...

  • 状态模式(State)

    结构 模式的组成环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,...

  • 状态模式(State)

    定义允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects fo...

  • 状态模式-state

    允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了他的类 state是一个接口,定义了基本操作,co...

  • 状态模式(State)

    1、概念 状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类,属于行为型模式。 2...

  • 状态模式(State)

    状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。代替大量if el...

  • 状态模式(State)

    参考博客iOS App的设计模式开发中对State状态模式的运用 使用场景: 例子1:按钮来控制一个电梯的状态,一...

  • 状态(State)模式

  • State 状态模式

    设计原则学习笔记 设计模式学习笔记 作用 将一个类在不同状态下的操作组合起来,成为一个类。方便不同状态下的操作切...

网友评论

      本文标题:State 状态模式

      本文链接:https://www.haomeiwen.com/subject/ikqivqtx.html