domingo, 7 de julio de 2013

PATRÓN COMANDO (COMMAND)



Intención
Este patrón permite solicitar una operación a un objeto sin conocer realmente el contenido de esta operación, ni el receptor real de la misma. Para ello se encapsula la petición como un objeto, con lo que además se facilita la parametrización de los métodos.

También conocido
Acción (action), transacción (Transaction).

Propósito
  • Encapsula un mensaje como un objeto, con lo que permite gestionar colas o registro de mensaje y deshacer operaciones.
  • Soportar restaurar el estado a partir de un momento dado.
  • Ofrecer una interfaz común que permita invocar las acciones de forma uniforme y extender el sistema con nuevas acciones de forma más sencilla.

Aplicaciones
  • Facilitar la parametrización de las acciones a realizar.
  • Independizar el momento de petición del de ejecución.
  • 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.
  • Soportar el "deshacer".
  • Desarrollar sistemas utilizando órdenes de alto nivel que se construyen con operaciones sencillas (primitivas).
 


Estructura
 






Participantes
  • AbstractCommand.
Clase que ofrece una 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 do y unDo. Gestionará su secuenciación y reordenación (sobre la base de prioridades por ejemplo).

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.

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.
 

No hay comentarios:

Publicar un comentario