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