1. Mode commande: encapsulez une demande en tant qu'objet, afin de pouvoir paramétrer le client avec différentes demandes, mettre en file d'attente ou consigner les journaux des demandes et prendre en charge les opérations annulables.
Deuxièmement, l'exemple de code:
public class Barbecue { publique vide bakeMutton () { System.out.println ( "Brochettes d'agneau grillées" ); } public void bakeChickenWing () { System.out.println ( "Ailes de poulet grillées" ); } } classe de résumé public Command { récepteur barbecue protégé ; Commande publique (récepteur Barbecue) { this .receiver = receiver; } résumé public void excuteCommand (); } classe publique BakeChickenWingCommand étend la commande { public BakeChickenWingCommand (récepteur Barbecue) { super (récepteur); } @Passer outre public void excuteCommand () { receiver.bakeChickenWing (); } } classe publique BakeMuttonCommand étend la commande { public BakeMuttonCommand (récepteur Barbecue) { super (récepteur); } @Passer outre public void excuteCommand () { receiver.bakeMutton (); } } public class Waiter { Liste privée <Commande> commandes = new ArrayList <> (); public void setOrder (Commande command) { if (command instanceof BakeChickenWingCommand) { System.out.println ( "Serveur: les ailes de poulet ont disparu, veuillez commander un autre barbecue." ); } else { orders.add (commande); System.out.println ( "Add order:" + command.toString () + "Time" + new Date ()); } } public void cancleOrder (commande Command) { orders.remove (commande); System.out.println ( "Annuler la commande" + command.toString () + "Heure" + nouvelle Date ()); } avis de nullité publique () { orders.forEach (Command :: excuteCommand); } } public class Main { public static void main (String [] args) { Barbecue boy = nouveau Barbecue (); Commande bakeMuttonCommand1 = new BakeMuttonCommand (boy); Commande bakeMuttonCommand2 = new BakeMuttonCommand (boy); Commande bakeChickenWingCommand1 = nouveau BakeChickenWingCommand (garçon); Fille de serveur = nouveau serveur (); girl.setOrder (bakeMuttonCommand1); girl.setOrder (bakeMuttonCommand2); girl.setOrder (bakeChickenWingCommand1); girl.notice (); } }
Troisièmement, les avantages
1. Peut facilement concevoir une file d'attente de commandes
2. Si nécessaire, vous pouvez facilement enregistrer la commande dans le journal
3. Autoriser la partie destinataire à décider de rejeter ou non la demande
4. Peut annuler et refaire la demande facilement
5. Étant donné que les classes de commandes spécifiques nouvellement ajoutées n'affectent pas les autres classes, il est facile d'ajouter de nouvelles classes de commandes spécifiques
Les principes du développement agile nous disent de ne pas ajouter de fonctionnalités basées sur des suppositions qui ne sont pas réellement nécessaires au code. Il peut être refactorisé en cas de besoin.