美文网首页设计模式C++实现笔记
STATE 状态模式 (行为模式)

STATE 状态模式 (行为模式)

作者: lixin_karl | 来源:发表于2019-03-07 16:46 被阅读0次

    介绍

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

    参与者

    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状态对象可以被共享
    • 会增加系统类和对象的个数
    • 状态模式的结构与实现都较为复杂

    参考

    • 《设计模式:可复用面向对象软件的基础》

    相关文章

      网友评论

        本文标题:STATE 状态模式 (行为模式)

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