I. PATRÓN DE DISEÑO: COMMAND

A continuación se encuentra la plantilla del patrón objeto de estudio:

1. Nombre del patrón: Command.

2. Clasificación del patrón: De comportamiento.

3. 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

4. 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

5. Aplicabilidad:

Este patrón se usa cuando:

Se quiera facilitar la parametrización de las acciones a realizar.
Se quiera independizar el momento de petición del de ejecución.
Se quiera implementar CallBacks, especificando que órdenes queremos que se ejecuten en ciertas situaciones de otras órdenes. Es decir, un parámetro de una orden puede ser otra orden a ejecutar.
Se quiera soportar el "deshacer".
Se quieran desarrollar sistemas utilizando órdenes de alto nivel que se construyen con operaciones sencillas (primitivas).

6. Estructura:



7. Participantes:

•AbstractCommand: Clase que ofrece un interfaz para la ejecución de órdenes. Define los métodos do y undo que se implementarán en cada clase concreta.
•ConcreteCommand: Clase que implementa una orden concreta y sus métodos do y undo. Su constructor debe inicializar los parámetros de la orden.
•Invoker: Clase que instancia las órdenes, puede a su vez ejecutarlas inmediatamente (llamando a do) o dejar que el CommandManager lo haga.
•CommandManager: Responsable de gestionar una colección de objetos orden creadas por el Invoker. llamará a los métodos doIt y unDoIt. Gestionará su secuenciación y reordenación (sobre la base de prioridades por ejemplo).

8. 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.

9. Consecuencias:

•Se independiza la parte de la aplicación que invoca las órdenes de la implementación de los mismos.
•Al tratarse las órdenes como objetos, se puede realizar herencia de las mismas, composiciones de órdenes (mediante el patrón Composite).
•Se facilita la ampliación del conjunto de órdenes.


10. Implementación:

oPermitir deshacer y repetir.
oEvitar 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

11. Código de ejemplo:

public interface Command{
void execute();
}
public class CommandGenerarNominas implements Command{
Universidad _universidad;
public CommandGenerarNominas(Universidad universidad){
_universidad = universidad;
}
public void execute(){
_universidad.generarNominas();
}
}
public class MenuUniversidad {
public boolean menuPrincipal(){
...
case 3: // generar nominas
// _universidad.generarNominas();
Command comando;
comando = new CommandGenerarNominas(_universidad);
comando.execute();
break;
...
}
}


12. 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, facilitándose una correspondencia entre ambos.

13. Patrones relacionados:

Este patrón se puede implementar con:

Factory Method: Ofrece una forma alternativa de llamar a los órdenes además del uso del command manager.
Interpreter: Se puede implementar un pequeño Intérprete mediante clases Command.
Snapshot: Puede facilitar el almacenamiento del estado de los objetos para implementar la acción Deshacer en lugar de utilizar órdenes inversas.
Template Method: Puede servir para implementar la lógica de Deshacer de forma un tanto automática o a alto nivel.
Composite: Permite realizar agrupaciones de órdenes de forma similar a una macro.
Prototype: Hay quien lo utiliza para implementar la copia de la orden al histórico de órdenes.

REFERENCIAS
[1] García Pérez Baltasar. Desarrollo rápido de aplicaciones. Version PDF.
[2] Orjuela Luz Marina. Modelos de Programación: Patrones GOF 10. Universidad Distrital Francisco José de Caldas. 2006.
[3] Cuesta Carlos E. Patrones de Diseño. Ingeniería de software I. Universidad Rey Juan Carlos. Versión PDF.
[4] Romero Tapia Esteban. Ayudantía N° 6. Versión PDF.
[5] http://www.lsi.us.es/docencia/get.php?id=668
[6] http://www.info-ab.uclm.es/asignaturas/42579/pdf/04-Capitulo4b.pdf

No hay comentarios:

Publicar un comentario