#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)模式了。