El patrón de diseño de comando toma una operación y sus argumentos y los envuelve en un objeto para ser ejecutado, registrado, etc. En el siguiente ejemplo, Command es una operación, su argumento es una Computadora y están envueltos en Switch.
En otra perspectiva, el patrón de comando tiene 4 partes: comando, receptor, invocador y cliente. En este ejemplo, Switch es el invocador y Computer es el receptor. Un comando concreto tiene un objeto receptor e invoca el método del receptor. El invocador puede usar diferentes comandos concretos. El cliente determina qué comando usar para el receptor.
Diagrama de clases de patrón de comando
Ejemplo de patrón de comando de Java
package designpatterns.command; import java.util.List; import java.util.ArrayList; /* The Command interface */ interface Command { void execute(); } // in this example, suppose you use a switch to control computer /* The Invoker class */ class Switch { private List<Command> history = new ArrayList<Command>(); public Switch() { } public void storeAndExecute(Command command) { this.history.add(command); // optional, can do the execute only! command.execute(); } } /* The Receiver class */ class Computer { public void shutDown() { System.out.println("computer is shut down"); } public void restart() { System.out.println("computer is restarted"); } } /* The Command for shutting down the computer*/ class ShutDownCommand implements Command { private Computer computer; public ShutDownCommand(Computer computer) { this.computer = computer; } public void execute(){ computer.shutDown(); } } /* The Command for restarting the computer */ class RestartCommand implements Command { private Computer computer; public RestartCommand(Computer computer) { this.computer = computer; } public void execute() { computer.restart(); } } /* The client */ public class TestCommand { public static void main(String[] args){ Computer computer = new Computer(); Command shutdown = new ShutDownCommand(computer); Command restart = new RestartCommand(computer); Switch s = new Switch(); String str = "shutdown"; //get value based on real situation if(str == "shutdown"){ s.storeAndExecute(shutdown); }else{ s.storeAndExecute(restart); } } } |