Patrones de Diseño:
Command
Oscar Sanz Merino
Nicolas Moreno Ishii
Alex Cuervo Faucha
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Introducción.

Command es un patrón de comportamiento.

Tambien conocido como Action, Transaction.

Especifica una forma simple de separar la ejecución de un
comando del entorno que generó dicho comando.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Intención



Permite solicitar una operación a un objeto
sin conocer el contenido ni el receptor real de la misma.
Encapsula un mensaje como un objeto, lo que permite gestionar:

colas o registros de mensajes.

el deshacer las operaciones realizadas.
Ofrece una interfaz común que aporta:

uniformidad al invocar las acciones.

sencillez al extender el sistema con nuevas acciones.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Motivación.

El concepto de orden (command) es ambiguo y complejo
pero está muy extendido. Podemos mencionar como ejemplos:


intérpretes de órdenes del sistema operativo.

lenguajes de macros de paquetes ofimáticos.

gestores de bases de datos.

protocolos de servidores de Internet.
El patrón presenta una forma sencilla y versátil de implementar
un sistema basado en comandos:

facilidad de uso y ampliación.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Aplicaciones

Se suele aplicar cuando se quiere:

Facilitar la parametrización de las acciones a realizar.


Independizar el momento de petición del de ejecución.

Implementar CallBacks. El parámetro de una orden puede ser otra orden a ejecutar.

Soportar o permitir el "deshacer".

Desarrollar sistemas utilizando órdenes de alto nivel que se construyen con
operaciones sencillas (primitivas).
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Estructura

Estructura del patrón Command:
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Participantes

Orden: (“Command”)


Orden Concreta: (“ConcreteCommand”)



declara una interfaz para ejecutar una operación.
define un enlace entre un objeto “Receiver” y una acción.
implementa “Execute” invocando la(s) correspondiente(s)
operación(es) del “Receiver”.
Cliente: (“Client”)

crea un objeto “ConcreteCommand” y establece su receptor.
Participantes

Invocador: (“Invoker”)


le pide a la orden que ejecute la petición.
Receptor: (“Receiver”)

sabe como llevar a cabo las operaciones asociadas a una petición.

Cualquier clase puede hacer actuar como “Receiver”.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Colaboraciones

El cliente crea un objeto “ConcreteCommand” y especifica su receptor.

Un objeto “Invoker” almacena el objeto “ConcreteCommand”


El invocador envia una petición llamando a “Execute” sobre la orden.

Cuando las ordenes se pueden deshacer:
 “ConcreteCommand” guarda el estado para deshacer la orden
antes de llamar a “Execute”.
El objeto “ConcreteCommand”, invoca operaciones de su receptor
para llevar a cabo la petición.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Consecuencias

Orden desacoplada:
El objeto que invoca la operación de aquél que sabe como realizarla.

Las órdenes son objeto de primera clase.


Se pueden ensamblar órdenes en una orden compuesta.


Manipulados y extendidos de forma natural.
Es una instancia del patrón “Composite”.
Facilidad de adición de nuevas órdenes.

¿Por que es debido esto?

no hace falta cambiar las clases existentes.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Implementación
Debemos tener en cuenta:

¿Como deberia ser de inteligente una orden? (ampl. conj. habilidades)

Implementandolo todo ella misma, sin delegar nada en el receptor.

Se define un enlace entre un receptor y las acciones que lleva a cabo la orden.

Permitir deshacer y repetir.

Evitar la acumulación de errores en el proceso de deshacer:
 A medida que se ejecutan y deshacen las órdenes repetidamente.
 El estado de la aplicación finalmente puede diferir de sus valores originales

Uso de plantillas en un LP (Ejemplo: C++)

Para evitar crear una subclase de Orden para cada clase de acción y receptor.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Código de ejemplo

Ejemplo en Java:
public interface Command{
void execute();
}
public class CommandGenerarNominas implements Command{
Universidad _universidad;
public CommandGenerarNominas(Universidad universidad){
_universidad = universidad;
}
public void execute(){
_universidad.generarNominas();
}
}
Código de ejemplo (cont.)

Ejemplo en Java:
public class MenuUniversidad {
public boolean menuPrincipal(){
...
case 3: // generar nominas
// _universidad.generarNominas();
Command comando;
comando = new CommandGenerarNominas(_universidad);
comando.execute();
break;
...
}
}
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Usos conocidos

Las clases Button y MenuItem de Java:



Facilitan la utilización de este patrón.
Declaran los métodos getActionCommand y setActionCommand para
dar nombres a las acciones realizadas por los objetos.
Facilitan una correspondencia entre ambos.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Índice
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introducción.
Intención.
Motivación.
Aplicabilidad.
Estructura.
Participantes.
Colaboraciones.
Consecuencias.
Implementación.
Código de ejemplo.
Usos conocidos.
Patrones relacionados.
Patrones relacionados

Factory Method:


Intérprete:


Se puede implementar un pequeño Intérprete mediante clases Command.
Template Method:


Ofrece una forma alternativa de llamar a los órdenes además del uso del command
manager.
Sirve para implementar la lógica de “Deshacer” de forma automática.
Composite y Prototype:

Permite realizar agrupaciones de órdenes de forma similar a una macro.

Hay quien lo utiliza para implementar la copia de la orden al histórico de órdenes.
Descargar

Implementación.