STATE 状态模式 (行为模式)

介绍

允许对象在内部状态改变时,改变它的行为

参与者

State 状态基类
ConcreteState 具体状态
Context 用户使用环境

实现代码

#include <iostream>

class State{//State 状态基类
public:
    virtual void Work() = 0;
};

class DayState:public State{//ConcreteState 具体状态
public:
    void Work() override
    {
        std::cout<<"白天就该工作啊!"<<std::endl;
    }
};

class NightState:public State{//ConcreteState 具体状态
public:
    void Work() override
    {
        std::cout<<"晚上就该加班啊!"<<std::endl;
    }
};

class Company {//Context 用户使用环境
public:
    void Run()
    {
        state->Work();
    }
    void SetState(State *state1)
    {
        state = state1;
    }
private:
    State *state;
};

int main()
{
    State *night = new NightState();
    State *day = new DayState();
    Company company;
    company.SetState(day);
    company.Run();
    company.SetState(night);
    company.Run();
}

输出结果

白天就该工作啊!
晚上就该加班啊!

特点

  • 将特定状态相关的行为局部化
  • 状态转换显示化
  • State状态对象可以被共享
  • 会增加系统类和对象的个数
  • 状态模式的结构与实现都较为复杂

参考

  • 《设计模式:可复用面向对象软件的基础》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容