Maison >développement back-end >Tutoriel C#.Net >Modèle de conception C brève introduction au modèle d'état

Modèle de conception C brève introduction au modèle d'état

黄舟
黄舟original
2017-01-17 13:34:081613parcourir

Mode État (State) : Permet de modifier le comportement d'un objet lorsque son état interne change. L'objet semble avoir changé de classe.

Le modèle d'état résout principalement la situation où l'expression conditionnelle qui contrôle la transition d'état d'un objet est trop complexe. En transférant la logique du jugement d’état à une série de classes représentant différents états, des jugements complexes peuvent être logicisés.

Implémentation du modèle :

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

Ce qui précède est le contenu du modèle de conception C, brève introduction au modèle d'état. Pour un contenu plus connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn