Patrón Command

¿Qué es el Patrón Command?

El Command es un patrón de diseño de comportamiento que encapsula una solicitud como un objeto, permitiendo parametrizar métodos con diferentes solicitudes, realizar operaciones en cola o implementar funcionalidades de deshacer/repetir.

Código de Ejemplo en JavaScript

            
class Light {
  turnOn() {
    console.log("La luz está encendida.");
  }

  turnOff() {
    console.log("La luz está apagada.");
  }
}

// Command Interface
class Command {
  execute() {}
  undo() {}
}

// Concrete Command
class TurnOnLightCommand extends Command {
  constructor(light) {
    super();
    this.light = light;
  }

  execute() {
    this.light.turnOn();
  }

  undo() {
    this.light.turnOff();
  }
}

class TurnOffLightCommand extends Command {
  constructor(light) {
    super();
    this.light = light;
  }

  execute() {
    this.light.turnOff();
  }

  undo() {
    this.light.turnOn();
  }
}

// Invoker
class RemoteControl {
  setCommand(command) {
    this.command = command;
  }

  pressButton() {
    this.command.execute();
  }

  pressUndo() {
    this.command.undo();
  }
}

// Uso del patrón Command
const light = new Light();
const turnOnCommand = new TurnOnLightCommand(light);
const turnOffCommand = new TurnOffLightCommand(light);

const remote = new RemoteControl();

// Encender la luz
remote.setCommand(turnOnCommand);
remote.pressButton(); // La luz está encendida.

// Apagar la luz
remote.setCommand(turnOffCommand);
remote.pressButton(); // La luz está apagada.

// Deshacer
remote.pressUndo(); // La luz está encendida.
      

Casos de Uso

  • Sistemas de control remoto para dispositivos.
  • Implementación de deshacer/repetir en aplicaciones de edición.
  • Colas de tareas con operaciones programadas.

Patrones Relacionados

  • Strategy: Ofrece diferentes implementaciones para un comportamiento específico.
  • Memento: Almacena el estado interno de un objeto para deshacer cambios.
  • Chain of Responsibility: Permite procesar solicitudes mediante una cadena de objetos.
Whatsapp Mentores Tech