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 deCommand
debe tener una operacionUnexecute
que deshaga los cambios realizados por la llamada previaExecute
. 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
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.