狀態模式(State):當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
狀態模式主要解決的是當控制一個對象狀態轉換的條件運算式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯化。
模式實現:
[code]class Context;class State{public: virtual void Handle(Context *pContext) = 0;};class ConcreteStateA: public State{public: virtual void Handle(Context *pContext){ std::cout << "I'm concretestateA.\n"; }};class ConcreteStateB: public State{public: virtual void Handle(Context *pContext){ std::cout << "I'm concretestateB.\n"; }};class Context{public: Context(State *state):pState(state){} void Request(){ if(pState){ pState->Handle(this); } } void ChangeState(State *pstate){ pState = pstate; }private: State *pState;};
用戶端
[code]int main(){ State *pState = new ConcreteStateA(); Context *context = new Context(pState); context->Request(); //Output: I'm concretestateA. State *pState2 = new ConcreteStateB(); context->ChangeState(pState2); context->Request(); //Output: I'm concretestateB. if(pState){ delete pState; pState = NULL; } if(pState2){ delete pState2; pState2 = NULL; } if(context){ delete context; context = NULL; } return 0;}
以上就是C++設計模式淺識狀態模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!