Patrón Command

Lectura de ~2 minutos

Encapsula peticiones como un objeto, permitiendo parametrizar clientes con distintas peticiones, encolar o hacer log de peticiones, y añade soporte a deshacer operaciones.

Aplicabilidad

  • Parametriza objetos con acciones a realizar.

  • Un objeto de tipo command tiene un ciclo de vida distinto a la petición original. Permitiendo encolar, especificar y ejecutar peticiones a diferentes tiempos.

  • Soporte a deshacer. Al ejecutar un command se puede guardar su estado y revertir los cambios. Para ello, la interfaz de Command debe tener una operacion Unexecute que deshaga los cambios realizados por la llamada previa Execute. Los comandos ejecutados deben guardarse en un histórico.

  • Soporte a un log de cambios, permitiendo que se puedan volver a ejecutar si el sistema se cuelga.

  • Permite estructurar un sistema sobre operaciones más primitivas. Dicha estructura soporta transacciones. El patrón command permite invocar a todas las transacciones del mismo modo.

Estructura

UMLBridgePattern

Se define una interfaz para ejecutar una operación Command. Un comando en concreto define una vinculación entre el receptor y la acción. Implementa Execute invocando a la/s operación/es correspondientes del receptor. El cliente crea el comando concreto con su receptor. El invocador realiza la petición.

Consecuencias

  • Desacopla el objeto que invoca la operación del que se sabe como ejecutarla.

  • Los comandos pueden ser extendidos como cualquier otro objeto.

  • Se puede estrucutrar comandos para formar comandos compuestos utilizando el patrón composite.

  • Es fácil añadir nuevos comandos, no hay que cambiar los ya existentes.

Puedes encontrar un pequeño ejemplo de este patrón aquí.

Nos vemos en las próximas líneas.

Escrito el 23/09/2018