terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat command.md
guest@codeandosimple: ~/blog/design-patterns $ cat command.md

Patrón Command_

// "Pregúntate si lo que estás haciendo hoy te acerca al lugar en el que quieres estar mañana" - Walt Disney

# Propósito

El patrón Command (comando, orden) encapsula una petición en un objeto, permitiendo parametrizar métodos con diferentes solicitudes, retrasar o encolar ejecuciones y soportar deshacer.

En términos simples: creamos un objeto con la información necesaria para que un manejador (handler) realice la tarea.

# Problema

  • Acoplamiento: Cuando el emisor (ej. un botón) está ligado directamente a la lógica de negocio.

  • Reutilización: Dificultad para agregar nuevas solicitudes sin modificar clases existentes.

# Solución

  • Objetos de Comando: Encapsulación de toda la información necesaria para la acción.

  • Separación: Los emisores no conocen los detalles de ejecución.

# Estructura

Estructura UML Command

# Participantes

  • Command: Interfaz con el método execute().
  • ConcreteCommand: Implementa Command e invoca al Receiver.
  • Invoker: Mantiene referencia al comando y llama a execute().
  • Receiver: Realiza el trabajo real (lógica de negocio).
  • Client: Crea y configura comandos y receptores.

# Cuándo Usarlo

  • Parametrizar objetos según una acción a realizar.

  • Implementar operaciones de deshacer (undo) y rehacer (redo).

  • Mantener un historial de solicitudes.

# Ventajas

  • verified

    Desacoplamiento: Aísla la invocación de la ejecución.

  • verified

    Extensibilidad: Nuevos comandos sin cambiar código base.

  • verified

    Flexibilidad: Soporta colas e historiales complejos.

# Desventajas

  • warning

    Complejidad: Más clases y objetos en el sistema.

  • warning

    Sobrecarga: Acciones simples convertidas en comandos.

# Ejemplo: Hogar Inteligente

Control de luces, termostatos y seguridad mediante una interfaz centralizada. Los comandos encapsulan las acciones de encendido/apagado.

Ejemplo Command Hogar

# Código Java

interface Command { void execute(); }

class LightOnCommand implements Command {
    private Light light;
    public void execute() { light.turnOn(); }
}

class RemoteControl {
    private Command command;
    public void setCommand(Command c) { command = c; }
    public void pressButton() { command.execute(); }
}

# Mapeo Participantes

  • Command (Interfaz): El contrato execute().
  • LightOn/Off (ConcreteCommand): Lógica específica.
  • Light (Receiver): Lógica de negocio.
  • RemoteControl (Invoker): Inicia la acción.

# Conclusiones

Facilita la extensión para incluir más dispositivos manteniendo un acoplamiento débil entre el emisor y el receptor.

# Patrones relacionados

Memento

Mantiene el estado previo para operaciones deshacer.

Composite

Estructuras compuestas para macro-comandos complejos.