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

黄舟
Libérer: 2017-01-17 13:43:52
original
1507 Les gens l'ont consulté

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;
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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 (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal