Passez les demandes du client dans un objet, vous permettant de paramétrer le client avec différentes demandes. Utilisé pour découpler le "demandeur de comportement" et "Empleverteur de comportement", un couplage lâche entre les deux peut être réalisé afin de s'adapter aux modifications. Séparez les facteurs changeants et immuables.
1. Rôle
Commande
Définit l'interface de la commande et déclare la méthode d'exécution.
Concretcommand
L'objet d'implémentation de l'interface de commande est une implémentation "virtuelle"; Il contient généralement le récepteur et appelle la fonction du récepteur pour terminer l'opération à effectuer par la commande.
Récepteur
Récepteur, l'objet qui exécute vraiment la commande. Toute classe peut devenir un récepteur tant qu'il peut implémenter les fonctions correspondantes requises par la commande.
Invocateur
L'objet de commande est requis pour exécuter la demande et maintient généralement l'objet de commande et peut maintenir de nombreux objets de commande. C'est là que le client déclenche réellement la commande et nécessite la commande pour effectuer l'opération correspondante, ce qui signifie qu'il équivaut à l'utilisation de l'entrée de l'objet de commande.
Client
Créez un objet de commande spécifique et définissez le récepteur de l'objet de commande. Notez que ce n'est pas un client dans notre sens conventionnel, mais assemble l'objet de commande et le récepteur. Peut-être qu'il serait préférable d'appeler ce client un assembleur, car le client qui utilise vraiment la commande déclenche l'exécution de Invoker.
2. Avantages
3. Inconvénients <br /> L'utilisation du mode de commande peut faire en sorte que certains systèmes aient trop de classes de commande spécifiques. Étant donné qu'une classe de commande spécifique est requise pour chaque commande, certains systèmes peuvent nécessiter un grand nombre de classes de commande spécifiques, ce qui affectera l'utilisation du mode de commande.
Iv. Situation applicable
5. Application <br /> La simulation comprend des commandes de mise sous tension, d'arrêt et de changement pour le fonctionnement du téléviseur. Le code est le suivant
// Interface pour exécuter la commande interface publique Commande {void execute (); } // Récepteur de commandes récepteur de classe publique TV {public int currentChannel = 0; public void turnon () {System.out.println ("Le télévisino est allumé."); } public void striptoff () {System.out.println ("La télévision est éteinte."); } public void changannel (int channel) {this.currentChannel = canal; System.out.println ("Now TV Channel Is" + Channel); }} // Arrête la commande ConcreteCommand public class Commandon implémente la commande {private tv mytv; public CommandOn (tv tv) {mytv = tv; } public void execute () {mytv.turnon (); }} // Arrête la commande ConcreteCommand public class Croomoff implémente la commande {private tv mytv; public Commandeoff (TV TV) {mytv = tv; } public void execute () {mytv.turoff (); }} // Command de commutation de canal ConcreteCommand public class CommandChange implémente la commande {private tv mytv; canal int privé; public CommandChange (TV TV, int channel) {mytv = tv; this.channel = canal; } public void execute () {mytv.changechannel (canal); }} // Il peut être considéré comme un contrôle de classe publique invokor de la télécommande {Commande privée OnCommand, OffCommand, ChangeChannel; Contrôle public (commande sur, Command Off, Command Channel) {onCommand = on; offCommand = off; ChangeChannel = canal; } public void turnon () {oncommand.execute (); } public void striptoff () {offCommand.Execute (); } public void ChangeChannel () {ChangeChannel.Execute (); }} // CLASSE TEST CLIENT CLASS PUBLIC CLIENT {public static void main (String [] args) {// Récepteur de commandes récepteur TV Mytv = new TV (); // Command Power-On ConcreTecommond CommandOn sur = new CommandOn (mytv); // Commande d'alimentation ConcreteCommond Commandoff OFF = new Commandoff (mytv); // Commande de commutation de commutation de canal ConcreteCommond CommandCange Channel = new CommandChange (mytv, 2); // Command Control Object Invoker Control Control = new Control (ON, OFF, canal); // Power-on Control.Turnon (); // commutateur Control.ChangeChannel (); // fermer Control.Turoff (); }} Résultats de l'exécution
Le Televisino est allumé.
Maintenant, la chaîne de télévision est 2
La télévision est éteinte.
6. Résumé
1. L'essence du mode de commande est d'encapsuler la commande et de séparer la responsabilité de délivrer la commande et la responsabilité de l'exécution de la commande.
2. Chaque commande est une opération: la partie demandant émet une demande, nécessitant une opération à effectuer; La partie réceptrice reçoit la demande et effectue l'opération.
3. Le mode de commande permet à la partie de demande d'être indépendante de la partie réceptrice, afin que la partie demandant n'ait pas à connaître l'interface de la partie qui reçoit la demande, ni à savoir comment la demande a été reçue, si, quand et comment l'opération a été exécutée.
4. Le mode de commande fait de la demande elle-même un objet, qui peut être stocké et passé comme d'autres objets.
5. La clé du mode de commande est d'introduire une interface de commande abstraite et les programmes de l'expéditeur pour l'interface de commande abstraite. Seules les commandes spécifiques qui implémentent l'interface de commande abstraite peuvent être associées au récepteur.
Ce qui précède est une introduction détaillée au modèle de conception de la commande Java, j'espère que cela sera utile à l'apprentissage de tout le monde.