zoukankan      html  css  js  c++  java
  • 设计模式 之 《状态模式》

    #ifndef __STATE_MODEL__
    #define __STATE_MODEL__
    
    #include <iostream>
    using namespace std;
    /*
    GOOD:当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,可考虑用到状态模式。
    */
    
    class Work;
    class ForenoonState;
    class NoonState;
    
    class State
    {
    public:
        virtual void writeProgram(Work* w) = 0;
    };
    
    class Work
    {
    private:
        State* current;
    public:
        double hour;
    public:
        Work();
        void setState(State* temp){ current = temp; }
        void writeProgramW(){ current->writeProgram(this); }
    };
    
    class NoonState : public State
    {
    public:
        virtual void writeProgram(Work* w)
        {
            cout<<"excute"<<endl;
            if(w->hour<13)
                cout<<"还不错啊"<<endl;
            else
                cout<<"不行了,还是睡觉吧"<<endl;
        }
    };
    
    class ForenoonState : public State
    {
    public:
        virtual void writeProgram(Work* w)
        {
            if(w->hour<12)
                cout<<"现在的精神无敌好"<<endl;
            else
            {
                w->setState(new NoonState());
                w->writeProgramW(); //注意加这句
            }
        }
    };
    
    Work::Work()
    {
        current = new ForenoonState();
    }
    
    
    #endif //__STATE_MODEL__
    
    /*
    #include "StateModel.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
        Work* mywork = new Work();
        mywork->hour = 9;
        mywork->writeProgramW();
        mywork->hour = 14;
        mywork->writeProgramW();
    
        return 0;
    }
    */
  • 相关阅读:
    hashilb的使用
    包的导入/软件开发规范/异常处理
    序列化模块/模块/包
    常见模块
    可变数据类型和不可变数据类型
    python-----运算符及while循环
    Python之字符串切片
    第一、二次实训作业
    第二次JAVA作业
    Java学习心得
  • 原文地址:https://www.cnblogs.com/MrGreen/p/3417198.html
Copyright © 2011-2022 走看看