Statusmodus (State): Ermöglicht die Änderung des Verhaltens eines Objekts, wenn sich sein interner Status ändert. Das Objekt scheint seine Klasse geändert zu haben.
Das Zustandsmuster löst hauptsächlich die Situation, wenn der bedingte Ausdruck, der den Zustandsübergang eines Objekts steuert, zu komplex ist. Durch die Übertragung der Zustandsurteilslogik auf eine Reihe von Klassen, die unterschiedliche Zustände repräsentieren, können komplexe Urteile logischisiert werden.
Musterimplementierung:
[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; };
Client
[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; }
Das Obige ist der Inhalt des C++-Entwurfsmusters, eine kurze Einführung in das Zustandsmuster. Weitere verwandte Inhalte finden Sie hier. Bitte beachten Sie die chinesische PHP-Website (www.php.cn)!