Patrón MEDIATOR
Ejemplos: Chat y Conferencia
Intención:
- Gestionar la comunicación entre distintos objetos, sin que éstos necesiten conocerse entre sí.
- Incrementa la reusabilidad de los objetos soportados por el mediador desacoplándolos del sistema en el cual se encuentran inmersos.
- Simplifica el mantenimiento del sistema centralizando la lógica de control.
- El mediador es comúnmente utilizado para coordinar componentes de la interfaz gráfica de usuario (GUI) relacionados.
- El objeto mediador en sí mismo puede empezar a ser bastante complejo.
Este patrón debe ser utilizado en casos donde convenga utilizar un procesador central, en vez de que cada objeto tenga que conocer la implementación de otro.
A diferencia del patron Observer, el patrón Mediator se usa cuando los objetos saben con quien se tienen que comunicarse, conocen el destinatario del mensaje. Funciona como si fuera un "cartero".
Nota: Con el patrón Observer lo que hacíamos es como si publicaramos en tablón de anuncios nuestro mensaje, y todo el que leyera ese tablón quedaba informado.
A diferencia del patron Observer, el patrón Mediator se usa cuando los objetos saben con quien se tienen que comunicarse, conocen el destinatario del mensaje. Funciona como si fuera un "cartero".
Nota: Con el patrón Observer lo que hacíamos es como si publicaramos en tablón de anuncios nuestro mensaje, y todo el que leyera ese tablón quedaba informado.
IMediator: define una interface para comunicarse con los objetos colegas.
ConcretoMediator: implementa la interface y define como los colegas se comunican entre ellos. Además los conoce y mantiene, con lo cual hace de procesador central de todos ellos.
Colega: define el comportamiento que debe implementar cada colega para poder comunicarse el mediador de una manera estandarizada para todos.
ColegaConcreto: cada colega conoce su mediador, y lo usa para comunicarse con otros colegas.
Los colegas envían y reciben requerimientos de un objeto Imediador. El Imediador gestiona cada mensaje y se lo comunica a otro colega si fuese necesario.
Ejemplo de Chat:
Nuestro ejemplo será un chat: donde habrá usuarios que se comunicaran entre sí en un salón de chat. Para ellos se define una interface llamada IUsuarioChat que todos los objetos que quieran participar de un chat deberán implementar. La clase Ususario representa un usuario que quiera chatear.
Estructura del proyecto:
Empezamos con la interface IUsuarioChat
Clase Usuario:
Interface ISalorDeChat
Clase SalonDeChat
Cuando creamos el salon (en el método constructor _new), le pasamos el TextLabel, donde vamos a escribir los textos de la conversacion.
Ademas se ha añadido un método "cierra", que se encargaria de anular la lista de usuarios cuando termine de usarse la sala de chat, para evitar que se creen referencias circulares.
El programa (Fmain):
Ejemplo de la aplicación funcionando:
Enlace de descarga del ejemplo: ejemplo chat
Otro ejemplo, parecido al del Chat, se trata de una conferencia, donde hay un presentador y varios asistentes que hacen preguntas y el presentador las responde enseñando una diapositiva explicativa.
Esquema del proyecto:
La interface IMiembroConferencia
La clase Asistente
La clase Conferenciante
La interface IsalonDeConferencia:
La clase SalonDeconferencia
Programa Principal:
Aplicación funcionando:
Enlace de descarga: codigo fuente
Fuentes:
http://migranitodejava.blogspot.com.es/2011/06/mediator.html
http://informaticapc.com/patrones-de-diseno/mediator.php
http://adrysmodelos.blogspot.com.es/
http://wwwswt.informatik.uni-rostock.de/deutsch/Lehre/Uebung/Beispiele/PatternExamples/patexamples.htm