狀態(tài)模式


#include <iostream>
using namespace std;
class Work;

class State {
    
public:
    ~State(){};
    virtual void WriteProgram(Work * work){};
};

class ForenoonState: public State {
    
public:
    ~ForenoonState(){};
    void WriteProgram(Work * work);
};

class NoonState:public State {
    
public:
    ~NoonState(){};
    void WriteProgram(Work * work);
};

class Work {
private:
    State  * current;
    double hour;
    
    bool finish = false;
    
public:
    Work(){current = new ForenoonState(); }
    double getHour(){return  hour;}
    void setHour(double hour){this->hour = hour;
        if (hour > 10) {
            current = new NoonState();
        } else {
            current = new ForenoonState();
        }
    }
    bool getFinish(){return  finish;}
    void setFinish(bool finish){this->finish = finish;}
    State *  getState(){return  current;}
    void setState(State * state){this->current = state;}
    
    void WriteProgram(){current->WriteProgram(this);}
};

//.m
void ForenoonState::WriteProgram(Work *work) {
    cout<< "it is"<<work->getHour()<<"i want to start work"<<endl;
}

void NoonState::WriteProgram(Work *work) {
    cout<< "it is"<<work->getHour()<<"i want to finish work"<<endl;
}


    Work * emergencyProject = new Work();
    emergencyProject->setHour(5);
    emergencyProject->WriteProgram();
    emergencyProject->setHour(30);
    emergencyProject->WriteProgram();

狀態(tài)模式主要解決的是當控制一個對象狀態(tài)轉換的條件表達式過于復雜時的情況。將狀態(tài)的判斷邏輯轉移到表示不同狀態(tài)的一系列類中可以把復雜的判斷邏輯簡化。

好處就是將與特定狀態(tài)的相關行為局部化,并且將不同狀態(tài)的行為分割開來。

當一個對象的行為取決于它的狀態(tài),并且它必須在運行時刻根據(jù)狀態(tài)改變它的行為時,就可以考慮使用狀態(tài)模式了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容