狀態模式(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++設計模式淺識狀態模式的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!