1
Patrones de comportamiento
Relacionados con la asignación de responsabilidades entre clases.
Enfatizan la colaboración entre objetos.
Caracterizan un flujo de control más o menos complejo que será transparente al que utilice el patrón.
Basados en herencia: Template Method e Interpreter
Basados en composición: Mediator, Observer,..
2
Chain of Responsibility (Cadena de Responsabilidad)
Propósito
Evita acoplar el emisor de un mensaje a su receptor dándole a más de un objeto la posibilidad de manejar la solicitud. Se define una cadena de objetos, de modo que un objeto pasa la solicitud al siguiente en la cadena hasta que uno la maneja.
Motivación
Facilidad de ayuda sensible al contexto.
El objeto que proporciona la ayuda no es conocido al objeto (p.e. un Button) que inicia la solicitud de ayuda.
3
Cadena de Responsabilidad
Motivación
4
Cadena de Responsabilidad
5
Estructura
Cadena de Responsabilidad
6
Cadena de Responsabilidad
Aplicabilidad
Más de un objeto puede manejar una solicitud, y el manejador no se conoce a priori.
Se desea enviar una solicitud a uno entre varios objetos sin especificar explícitamente el receptor.
El conjunto de objetos que puede manejar una solicitud puede ser especificado dinámicamente.
7
Cadena de Responsabilidad
Consecuencias
Reduce acoplamiento
Proporciona flexibilidad al asignar responsabilidades
No se garantiza el manejo de la solicitud
8
Cadena de Responsabilidad
Implementación
Dos posibles formas de implementar la cadena
Definir nuevos enlaces (en Manejador)
Usar enlaces existentes (p.e. un objeto composite)
class ManejadorAyuda {
public ManejadorAyuda (ManejadorAyuda s) {sucesor = s;};
public void manejarAyuda () { if (sucesor != null) sucesor.manejarAyuda();};
private ManejadorAyuda sucesor;
}
9
Cadena de Responsabilidad
Implementación
¿Qué sucede si tenemos diferentes tipos de solicitudes?
En Manejador un método para cada solicitud
En Manejador un único método con un parámetro que representa el tipo de solicitud, por ejemplo un String.
En Manejador un único método que tiene un parámetro de una clase Solicitud que representa la solicitud.
10
Cadena de Responsabilidad
Ejemplo 1: Java 1.0 AWT
Mecanismo de delegación de eventos: Un evento es pasado al componente donde ocurre que puede manejarlo o lo pasa a su contenedor.
public boolean action(Event event, Object obj) {
if (event.target == test_button) doTestButtonAction();
else if (event.target == exit_button) doExitButtonAction();
else return super.action(event,obj);
return true;}
Página siguiente |