Mode de commande de mode de conception Big Talk

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.

Je suppose que tu aimes

Origine www.cnblogs.com/zsmcwp/p/12694657.html
conseillé
Classement