Maison >développement back-end >Tutoriel C#.Net >Une brève introduction au mode commande en mode conception C

Une brève introduction au mode commande en mode conception C

黄舟
黄舟original
2017-01-17 13:43:521493parcourir

Le mode Commande encapsule une requête en tant qu'objet, vous permettant de paramétrer les clients avec différentes requêtes ; de mettre en file d'attente les requêtes ou d'enregistrer les journaux de requêtes, et de prendre en charge les opérations réversibles.

Cas de test :

[code]int main(){
    Barbecuer boy;
    BakeChickenWingCommand bakechickenwingcommand1(boy);
    BakeChickenWingCommand bakechickenwingcommand2(boy);
    BakeMuttonCommand bakemuttoncommand1(boy);
    BakeMuttonCommand bakemuttoncommand2(boy);

    Waiter girl;
    girl.SetOrder(&bakechickenwingcommand1);
    girl.SetOrder(&bakechickenwingcommand2);
    girl.SetOrder(&bakemuttoncommand1);
    girl.SetOrder(&bakemuttoncommand2);
    girl.Notify();
    girl.CancelOrder(&bakechickenwingcommand2);
    girl.Notify();

    return 0;
}

Implémentation de classe :

[code]class Barbecuer{
public:
    void BakeMutton()
    {
        cout << "Meat\n";
    }
    void BakeChickenWing()
    {
        cout << "Chicken\n";
    }
};

class Command{
protected:
    Barbecuer receiver;
public:
    Command(){}
    Command(Barbecuer & b) :receiver(b){}
    virtual void ExcuteCommand() = 0;
};

class BakeMuttonCommand :public Command{
public:
    BakeMuttonCommand(Barbecuer & b) { receiver = b; }
    void ExcuteCommand(){ receiver.BakeMutton(); }
};

class BakeChickenWingCommand :public Command{
public:
    BakeChickenWingCommand(Barbecuer & b) { receiver = b; }
    void ExcuteCommand(){ receiver.BakeChickenWing(); }
};

class Waiter{
    list<Command *>orders;
public:
    void SetOrder(Command * comptr);
    void CancelOrder(Command * comptr);
    void Notify();
};

void Waiter::SetOrder(Command * comptr){
    orders.push_back(comptr);
    cout << "Add order\n";
}

void Waiter::CancelOrder(Command * comptr){
    orders.remove(comptr);
    cout << "Cancel order\n";
}

void Waiter::Notify(){
    for each (Command * var in orders){
        var->ExcuteCommand();
    }
}

Résumé :

Il est plus facile de concevoir une file d'attente de commandes

Les commandes peuvent être facilement enregistrées si nécessaire ;

permet à la partie recevant la demande de décider si elle doit opposer son veto à la demande ;

peut facilement révoquer et refaire la demande

Puisque l’ajout d’une nouvelle classe de commandes n’affecte pas les autres classes, il est facile d’ajouter de nouvelles classes de commandes spécifiques.

Le mode commande sépare l'objet qui demande une opération de l'objet qui sait effectuer une opération


Ce qui précède est le contenu du mode commande en mode conception C, pour plus de contenu 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