martes, 26 de mayo de 2009

Mediator


Nombre del patrón
Mediator

Clasificación del patrón
De Comportamiento

Intención
Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.

Motivación
Cuando muchos objetos interactúan con otros objetos, se puede formar una estructura muy compleja, con objetos con muchas conexiones con otros objetos. En un caso extremo cada objeto puede conocer a todos los demás objetos. Para evitar esto el patrón Mediator encapsula el comportamiento de todo un conjunto de objetos en un solo objeto.
Los objetos envían y reciben peticiones a través del mediador, este patrón implementa el comportamiento cooperativo encaminando esas peticiones a los objetos apropiados.

Aplicabilidad
Utilizaremos el patrón Mediator cuando:
  • Un conjunto grande de objetos se comunica de una forma bien definida, pero compleja.
  • Dificultad para reutilizar objetos ya que nos referimos a varios objetos para comunicarnos.
  • El comportamiento de muchos objetos que esta distribuido entre varias clases, puede resumirse en una o varias por subclasificación.

Estructura

Participantes
Mediator: define una interface para comunicarse con los objetos colegas.
ConcreteMediator: Implementa el comportamiento cooperativo entre los colegas (como se comunican entre ellos). Además los conoce y mantiene.
Colleagues classes: Cada colega conoce su mediador, y usa a este para comunicarse con otros colegas.

Colaboraciones
Los objetos (Colegas) envían y reciben requerimientos (requests) de un objeto mediador. El mediador implementa como se comunican los objetos.

Consecuencias
Ventajas e inconvenientes del patrón Mediator:

  • Reduce herencia. Con una subclase llamada Mediador cambiamos el comportamiento, que de otra manera estaría distribuido en varios objetos.
  • Desacopla a los objetos. El patrón Mediator promueve bajar el acoplamiento entre objetos. Se puede variar y rehusar objetos y mediadores independientemente.
  • Simplifica la comunicación entre objetos. Los objetos que se comunican de la forma "muchos a muchos" puede ser remplazada por una forma "uno a muchos" que es menos compleja y más elegante. Además esta forma de comunicación es más fácil de entender.
    Abstrae como los objetos cooperan. Haciendo a la mediación un concepto independiente y encapsulándolo en un objeto permite enfocar como los objetos interactúan. Esto ayuda a clarificar como los objetos se relacionan en un sistema.
  • Centraliza el control. El mediador es el que se encarga de comunicar a los objetos, este puede ser muy complejo, difícil de entender y modificar.

Implementación
Es importante tener en cuenta en la implementación de este patrón:

  • Omitir la clase abstracta Mediator. No es necesario crear una clase abstracta Mediador cuando los objetos solo trabajan con un mediador. El acoplamiento abstracto de dicha clase permite que los objetos trabajen con diferentes subclases Mediator y viceversa.
  • Comunicación Objeto y Mediador. Los objetos se comunican su mediador cuanto tiene lugar un evento. Las clases de objetos cada vez que cambian su estado envían notificaciones al mediador. El mediador responde propagando los efectos de dichos eventos a los otros objetos.
    Otra forma define al Mediador una interfaz de notificación especializada que permite a los objetos ser más directos en su comunicación.

Usos Conocidos
El Mediator es comúnmente usado en el desarrollo de aplicaciones que poseen varios componentes dentro de las interfaces gráficas que poseen.
También aparece otra aplicación en el framework de dibujo Unidraw

Patrones relacionados
Un patrón muy parecido a éste es el Facade que se diferencia en que abstrae un sistema de objetos proporcionado una interfaz más conveniente, utilizando un protocolo unidireccional (Fachada realiza solo peticiones a las clases del subsistema pero no a la inversa), mientras que el Mediator usa un protocolo multidireccional.
Con el patrón Observer los objetos pueden comunicarse con el mediador.

Referencias Bibliográficas
Design Patterns Elements of Reusable Object-Oriented Software, GoF.
http://dc.exa.unrc.edu.ar/nuevodc/materias/sistemas/2007/Patrones/1181918751/MediatorRes2.pdf
http://kybele.escet.urjc.es/documentos/SI/Patrones/14_Mediator.ppt

No hay comentarios:

Publicar un comentario