Diferencia entre revisiones de «Command (patrón de diseño)»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Revertidos los cambios de 85.48.255.17 a la última edición de Sorruno usando monobook-suite
Línea 19: Línea 19:
*Independizar el momento de petición del de ejecución.
*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.
*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 so".
*Soportar el "deshacer".
*Desarrollar sistemas utilizando órdenes de alto nivel que se construyen con operaciones sencillas (primitivas).
*Desarrollar sistemas utilizando órdenes de alto nivel que se construyen con operaciones sencillas (primitivas).



Revisión del 13:28 19 may 2009

En programación orientada a objetos, Command es un patrón de diseño.

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.

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.

Motivo

  • El concepto de "orden" puede ser ambiguo y complejo en los sistemas actuales y al mismo tiempo muy extendido: intérpretes de órdenes del sistema operativo, lenguajes de macros de paquetes ofimáticos, gestores de bases de datos, protocolos de servidores de Internet, etc.
  • Este patrón presenta una forma sencilla y versátil de implementar un sistema basado en comandos facilitándose su uso y ampliación.,,,,,

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

Estructura del patrón Command

También en Estructura del Patrón Command

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

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.

Patrones relacionados

Ofrece una forma alternativa de llamar a los órdenes además del uso del command manager.

Se puede implementar un pequeño Intérprete mediante clases Command.

Puede facilitar el almacenamiento del estado de los objetos para implementar la acción Deshacer en lugar de utilizar órdenes inversas.

Puede servir para implementar la lógica de Deshacer de forma un tanto automática o a alto nivel.

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.