Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Einführung in Zustandsmuster in C++-Entwurfsmustern

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

黄舟
黄舟Original
2017-01-17 13:34:081494Durchsuche

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;
};

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;
}

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


Stellungnahme:
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