PDF de programación - Patrones de Diseño Patrón de comportamiento Command Técnicas de Programación

Imágen de pdf Patrones de Diseño Patrón de comportamiento Command Técnicas de Programación

Patrones de Diseño Patrón de comportamiento Command Técnicas de Programacióngráfica de visualizaciones

Publicado el 16 de Abril del 2017
1.286 visualizaciones desde el 16 de Abril del 2017
64,5 KB
14 paginas
Creado hace 15a (11/05/2008)
Patrones de Diseño
Patrón de comportamiento Command

Técnicas de Programación - Curso 2007/08

Command
Propósito
Encapsular peticiones en forma de objetos.

Permite parametrizar a los clientes con distintas
peticiones, hacer colas de peticiones, llevar un
registro de la peticiones realizadas, y deshacer el
efecto de las peticiones.

También conocido como action, transaction

Command
Motivación
Ej: framework gráfico con objetos como botones, menús ...
que realizan operaciones en base a eventos de usuario. El
comportamiento del objeto depende de la aplicación

Solución:

Encapsular las peticiones como objetos

Application
add (Document)

Menu

add (MenuItem)

Document
open ()
close ()
cut ()
copy ()
paste ()

MenuItem
clicked ()

command

Command
execute ()

command.execute()

Command
Motivación

commands

Command
execute ()

Document
open ()
close ()
cut ()
copy ()
paste ()

doc

PasteCommand
execute ()

OpenCommand
execute ()
askUser ()

MacroCommand
execute ()

doc.paste()

name = askUser()
doc = new Document(name)
application.add(doc)
doc.open()

forall c in commands

c.execute()

application

Application
add (Document)

Command
Aplicabilidad
Usa el patrón Command si quieres:

Parametrizar objetos mediante una acción

Especificar, encolar y ejecutar peticiones en distintos momentos

(el objeto command tiene un tiempo de vida distinto de la petición)

Operaciones deshacer (método adicional en command)

Acciones de recuperación del sistema (métodos adicionales salvar

y recuperar en command)

Interfaz común que permita invocar las acciones de modo uniforme,

y extender el sistema con nuevas acciones de forma sencilla

Command
Estructura

Invoker

Command
+ execute()

Client

Receiver
+ action()

receiver

ConcreteCommand
- state

+ execute()

receiver.action()

Command
Participantes
Command: define la interfaz de ejecución de operaciones

ConcreteCommand (PasteCommand, OpenCommand): Implementa

la interfaz de ejecución invocando operaciones del receptor. De
este modo relaciona una acción con un receptor

Client (Application): crea un comando concreto e indica a quién va

dirigido (receptor)

Invoker (MenuItem): contiene el comando asociado a la petición

Receiver (Document, Application): sabe cómo realizar las operaciones
asociadas a una petición. Cualquier clase puede actuar como receptor.

Command
Colaboraciones (ejemplo)

d:Documento

:Editor

paste:MenuItem

new ComandoPaste (d)

addComando (comando)

comando:

ComandoPaste

paste ()

execute ()

Command
Colaboraciones (ejemplo)

ed:Editor

crear:MenuItem

new ComandoCrear (ed)

addComando (comando)

comando:

ComandoCrear

execute ()

d:Documento

add (d)

open ()

Command
Consecuencias
Desacopla el objeto que invoca la operación del que sabe

cómo llevarla a cabo

Los comandos son entidades de “primer orden”: se pueden

manipular y extender como cualquier otro objeto

Se pueden crear macro-comandos (patrón composite)

Es fácil añadir nuevos comandos ya que no es necesario

cambiar las clases existentes

Command
Implementación
¿Cómo de inteligente debe ser un comando? 2 extremos:

Invocan una acción en el receptor
Implementan el comportamiento sin delegar: útil para comandos
independientes de un receptor, o cuando el receptor está implícito

¿Cómo implementar las operaciones undo y redo?

Operaciones adicionales en command
Almacenar el estado previo a la ejecución del comando: objeto
receptor, argumentos de la operación, valores del receptor que
puedan cambiar tras ejecutar el comando
Almacenar el estado anterior a la ejecución del

comando permite hacer un undo

Almacenar todos los estados anteriores permite

hacer n undo

Command
Código de ejemplo

public interface Command {
public void execute();
}
public class CommandGenerarNominas implements Command {

_universidad = universidad;

private Universidad _universidad;
public CommandGenerarNominas (Universidad universidad) {
}
public void execute() {
}

_universidad.generarNominas();

}
public class MenuUniversidad {

public boolean menuPrincipal {
...
case 3: // generar nóminas

// _universidad.generarNominas();

Command comando = new CommandGenerarNominas(_universidad);
comando.execute();
break;

}

}

Command
Ejercicio
Se quiere desarrollar una clase que ejecute periódicamente tareas
de mantenimiento del sistema (ej. realizar copias de seguridad del
sistema, ejecutar el antivirus, etc.)

Cada tarea está implementada como un método de alguna clase

existente

Se quiere que la nueva clase tenga un bajo acoplamiento con las

clases que implementan dichas tareas

Command
Solución

PlanificadorTareas
+ añadirTarea(Tarea)
+ eliminarTarea(Tarea)

Tarea
- frecuencia
- ultimaEjecucion
+ execute()

ClaseSistema
+ action()

CopiaSeguridad
+ execute()

PasarAntivirus
+ execute()

claseSistema.action();
  • Links de descarga
http://lwp-l.com/pdf2997

Comentarios de: Patrones de Diseño Patrón de comportamiento Command Técnicas de Programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad