状態パターン (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 中国語 Web サイト (www.php.cn) に注目してください。