Se presentan una descripción corta y general de algunos patrones de comportamiento, solo se habla de su intención, aplicabilidad, estructura y participantes, primero vamos a tratar los patrones chain of Responsibility, Command, Interprter y finalmente Iteratro.
1. Chain of Responsibility
Intención
Evita el acoplamiento del emisor de una petición y su receptor, para esto le da a más de un objeto de una cadena la responsabilidad de manejar la petición. La cadena recibe objetos y la pasa a lo largo de la cadena hasta que alguno de los elementos de la cadena se encargue de manejarlo.
Aplicabilidad
Use chain of responsibility cuando:
- Más de un objeto puede manejar una petición.
- 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.
Participantes
- Handler: Define una interfaz para manejar el objeto. Opcionalmente puede definir el sucesor.
- ConcreteHandler: Maneja la petición si puede. Puede acceder a su sucesor. Si la petición puede ser maneja, se concluye el proceso, sino se envía la petición al sucesor.
- Cliente: Inicia la petición sobre en un objeto concreteHandler sobre la cadena.
2. Command
Intención
Encapsula una petición como un objeto, así deja parametrizar a los clientes con diferentes peticiones, añadir a una cola peticiones y soportar operaciones.
Aplicabilidad
Command debe ser aplicado en los siguientes casos:
- Objetos parametrizados dependen de la acción que ellos efectúan.
- Especificar o agregar en una cola y ejecutar peticiones en momentos diferentes de tiempo.
- Ofrecer soporte para desacoplar acciones.
- Estructurar el sistema en operaciones de alto nivel que se basan en operaciones primitivas.
- Desacopla el objeto que envía la acción del que la efectúa.
Estructura
Participantes
- Command: declara una interfaz para ejecutar una operación.
- ConcreteCommand: implementa la interfaz command. Mantiene una referencia a Receiver. Cuando se llama al método execute (), ConcreteCommand llama a uno o más métodos del Receiver.
- Client: Crea un objeto ConcreteCommand le asigna su su objeto Receiver
- Invoker: El invocador del método execute () de command. Pide a command que atienda peticiones ().
- Receiver: conoce como se envían las operaciones.
3. Interpreter
Intención
Dado un lenguaje, definir una representación para su gramática junto con un intérprete que utiliza la representación para interpretar sentencias en dicho lenguaje.
Aplicabilidad.
Este patrón se utiliza cuando hay un lenguaje que interpretar, y se puede representar las sentencias como arboles sintácticos abstractos, el patrón funciona mejor cuando:
- La gramática del lenguaje es simple.
- La eficiencia no es prioritaria para el sisttema.
Estructura
Participantes
- AbstractExpression: declara una operación iterpret abstracta que es común a todos los nodos del árbol sintáctico abstracto.
- TerminalExpression: Implementa un método interpret asociado a un símbolo de la gramática.
- NonterminalExpression: Implementa AbstractExpression como TerminalExpression, pero la diferencia es que este no es un símbolo terminal en la estructura de árbol, sino un no. Mantiene a la siguiente expresión, e invoca métodos interpret en cada uno de sus hijos.
- Context: Contiene información que es global al interpretador.
- Client: Construye o recibe una instancia de un árbol de sintaxis abstracta.
4. Iterator
Intención
Provee una manera de acceder a un agregado secuencial de objetos, sin exponer detalles de su representación.
Aplicabilidad
Use el patrón Iterator:
- Para acceder a los contenidos de objetos de un agregado, sin exponer su representación interna.
- Para soportar múltiples recorridos de un agregado de objetos.
- Para proveer un interfaz uniforme para recorrer diferentes agregados.
Estructura
Participantes.
- Iterator: Define un interfaz para acceder y atravesar elementos.
- ConcrteIterator: Implementa la interfaz iterator. Mantiene referencia a la actual posición.
- Aggragate: Define una interfaz para crear un objeto Iterator.
- ConcreteAggregate: Implementa la interfaz de de creación de iteradores y retorna una instancia de su propio ConcrteIterator.
Referencias bibliográficas
[1] Erich Gamma et al, Elements of reusable object-oriented software.
[2] Steve Holzner, Design patterns for dummies, Wiley Publishing Inc, Indianapolis, EEUU, 2006, 339.
[3] Jesús García Molina, Análisis y diseño de software - Patrones de diseño, dis.um.es/~jmolina/astema3.
No hay comentarios:
Publicar un comentario