設計模式之- 狀態模式(State Pattern)
阿新 • • 發佈:2018-09-24
mage player out read end des 我們 能夠 esp
狀態模式
在狀態模式(State Pattern)中,類的行為是基於它的狀態改變的。這種類型的設計模式屬於行為型模式。 在狀態模式中,我們創建表示各種狀態的對象和一個行為隨著狀態對象改變而改變的 context 對象。 C++實現代碼:#include<iostream> #include<string> using namespace std; class State; class Context {//上下文環境,擁有狀態 State* state; public: Context(){ state = nullptr; }void setState(State* state){ this->state = state; } State* getState(){ return state; } }; class State {//狀態接口,可擴展出多種不同的狀態 public: virtual void doAction(Context* context) = 0; virtual string toString() = 0; }; class StartState :public State {//具體的狀態,doAction方法能夠以當前狀態直接影響上下文public: void doAction(Context* context) { cout<<"Player is in start state"<<endl; context->setState(this); } string toString(){ return "Start State"; } }; class StopState :public State { public: void doAction(Context* context) { cout<<"Player is in stop state"<<endl; context->setState(this); } string toString(){ return "Stop State"; } }; class StatePatternDemo { public: static void method() { Context* context = new Context();//上下文環境 StartState* startState = new StartState();//第一次改變狀態 startState->doAction(context); cout<<context->getState()->toString()<<endl; StopState* stopState = new StopState();//第二次改變狀態 stopState->doAction(context); cout<<context->getState()->toString()<<endl; } }; int main(int argc,char** argv){ StatePatternDemo::method(); }
類圖:
狀態模式描述了一種由狀態主導的環境上下文變化模式,能夠抽象出一個個狀態,從而對環境進行影響,挺有用的。
設計模式之- 狀態模式(State Pattern)