b'\n_START_ARTICLE_\nCommand (patr\xc3\xb3n de dise\xc3\xb1o)\n_START_PARAGRAPH_\nEn programaci\xc3\xb3n orientada a objetos, Command es un patr\xc3\xb3n de dise\xc3\xb1o.\n_START_SECTION_\nIntenci\xc3\xb3n\n_START_PARAGRAPH_\nEste patr\xc3\xb3n permite solicitar una operaci\xc3\xb3n a un objeto sin conocer realmente el contenido de esta operaci\xc3\xb3n, ni el receptor real de la misma. Para ello se encapsula la petici\xc3\xb3n como un objeto, con lo que adem\xc3\xa1s facilita la parametrizaci\xc3\xb3n de los m\xc3\xa9todos.\n_START_SECTION_\nEjemplo\n_START_PARAGRAPH_\nPatr\xc3\xb3n Comando en Wikibooks_NEWLINE_Consid\xc3\xa9rese un "simple" interruptor. En este ejemplo configuramos el interruptor con dos \xc3\xb3rdenes: encender la luz y apagar la luz._NEWLINE_Un beneficio de esta implementaci\xc3\xb3n en particular del patr\xc3\xb3n orden es que el interruptor puede ser usado en cualquier dispositivo, no solo con una luz - el interruptor en el siguiente ejemplo enciende y apaga la luz, pero el constructor del interruptor es capaz de aceptar cualquier subclase de Orden para sus dos par\xc3\xa1metros. Por ejemplo, se podr\xc3\xada configurar el interruptor para encender un motor._NEWLINE_N\xc3\xb3tese: Una cr\xc3\xadtica de la aplicaci\xc3\xb3n de ejemplo es que no modeliza verdaderamente un circuito el\xc3\xa9ctrico. Un interruptor el\xc3\xa9ctrico es tonto. Un verdadero interruptor binario solo conoce si est\xc3\xa1 en una posici\xc3\xb3n u otra. No sabe nada o no tiene relaci\xc3\xb3n directa con las tareas que se le podr\xc3\xadan asignar en un circuito. El interruptor simplemente publica un evento de su estado actual (encendido o apagado). El circuito deber\xc3\xada entonces contener una M\xc3\xa1quina de estados que gestione los estados en momentos dados (escuchando los eventos del interruptor) para acomodar apropiadamente complejos circuitos con tareas e interruptores. Cada tarea es condicional a un estado espec\xc3\xadfico del circuito ( no directamente a un interruptor). En conclusi\xc3\xb3n, el interruptor no deber\xc3\xada ser consciente de los detalles de la l\xc3\xa1mpara.\n_START_SECTION_\nImplementaci\xc3\xb3n en Java\n_START_PARAGRAPH_\n/* The Invoker class */public class Switch {_NEWLINE__NEWLINE_    private Command flipUpCommand;_NEWLINE_    private Command flipDownCommand;_NEWLINE__NEWLINE_    public Switch(Command flipUpCmd, Command flipDownCmd) {_NEWLINE_         this.flipUpCommand = flipUpCmd;_NEWLINE_         this.flipDownCommand = flipDownCmd;_NEWLINE_    }_NEWLINE__NEWLINE_    public void flipUp() {_NEWLINE_         flipUpCommand.execute();_NEWLINE_    }_NEWLINE__NEWLINE_    public void flipDown() {_NEWLINE_         flipDownCommand.execute();_NEWLINE_    }}/* The Receiver class */public class Light {_NEWLINE__NEWLINE_     public Light() {  }_NEWLINE__NEWLINE_     public void turnOn() {_NEWLINE_        System.out.println("The light is on");_NEWLINE_     }_NEWLINE__NEWLINE_     public void turnOff() {_NEWLINE_        System.out.println("The light is off");_NEWLINE_     }}/* The Command interface */public interface Command {_NEWLINE_    void execute();}/* The Command for turning the light on in North America, or turning the light off in most other places */public class FlipUpCommand implements Command {_NEWLINE__NEWLINE_   private Light theLight;_NEWLINE__NEWLINE_   public FlipUpCommand(Light light) {_NEWLINE_        this.theLight=light;_NEWLINE_   }_NEWLINE__NEWLINE_   public void execute(){_NEWLINE_      theLight.turnOn();_NEWLINE_   }}/* The Command for turning the light off in North America, or turning the light on in most other places */public class FlipDownCommand implements Command {_NEWLINE__NEWLINE_   private Light theLight;_NEWLINE__NEWLINE_   public FlipDownCommand(Light light) {_NEWLINE_        this.theLight=light;_NEWLINE_   }_NEWLINE__NEWLINE_   public void execute() {_NEWLINE_      theLight.turnOff();_NEWLINE_   }}/* The test class or client */public class PressSwitch {_NEWLINE__NEWLINE_   public static void main(String[] args){_NEWLINE_      // Check number of arguments_NEWLINE_      if (args.length != 1) {_NEWLINE_         System.err.println("Argument \\"ON\\" or \\"OFF\\" is required.");_NEWLINE_         System.exit(-1);_NEWLINE_      }_NEWLINE__NEWLINE_      Light lamp = new Light();_NEWLINE_      Command switchUp = new FlipUpCommand(lamp);_NEWLINE_      Command switchDown = new FlipDownCommand(lamp);_NEWLINE__NEWLINE_      // See criticism of this model above:_NEWLINE_      // The switch itself should not be aware of lamp details (switchUp, switchDown)_NEWLINE_      // either directly or indirectly_NEWLINE_      Switch mySwitch = new Switch(switchUp, switchDown);_NEWLINE__NEWLINE_      switch (args[0]) {_NEWLINE_         case "ON":_NEWLINE_            mySwitch.flipUp();_NEWLINE_            break;_NEWLINE_         case "OFF":_NEWLINE_            mySwitch.flipDown();_NEWLINE_            break;_NEWLINE_         default:_NEWLINE_            System.err.println("Argument \\"ON\\" or \\"OFF\\" is required.");_NEWLINE_            System.exit(-1);_NEWLINE_      }_NEWLINE_   }}\n_START_SECTION_\nUsos conocidos\n_START_PARAGRAPH_\nLas clases Button y MenuItem de Java facilitan la utilizaci\xc3\xb3n de este patr\xc3\xb3n, declaran los m\xc3\xa9todos getActionCommand y setActionCommand para dar nombres a las acciones realizadas por los objetos, facilit\xc3\xa1ndose una correspondencia entre ambos.'