Eine kurze Einführung in Zustandsmuster in C++-Entwurfsmustern

黄舟
Freigeben: 2017-01-17 13:34:08
Original
1538 Leute haben es durchsucht

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&#39;m concretestateA.\n";
    }
};

class ConcreteStateB: public State{
public:
    virtual void Handle(Context *pContext){
        std::cout << "I&#39;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;
};
Nach dem Login kopieren

Client

[code]int main(){
    State *pState = new ConcreteStateA();
    Context *context = new Context(pState);
    context->Request();  //Output: I&#39;m concretestateA.

    State *pState2 = new ConcreteStateB();
    context->ChangeState(pState2);
    context->Request();  //Output: I&#39;m concretestateB.

    if(pState){
        delete pState;
        pState = NULL;  
    }
    if(pState2){
        delete pState2;
        pState2 = NULL;
    }
    if(context){
        delete context;
        context = NULL;
    }
    return 0;
}
Nach dem Login kopieren

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)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage