Patron Mediator - tectijuana/javapdd16a-Archived GitHub Wiki
Es un patrón de diseño que define un objeto que hace de procesador central, coordinando las relaciones con sus asociados o participantes. Permite tener una interaccion entre los objetos formando asi una estructura compleja con muchas conexiones para los distintos objetos, en un caso extremo cada patron puede reconocer a los demas objetos. Para evitar que esto suceda este patron encapsula el comportamiento de todo un conjunto de objetos en un solo objeto.
- Un conjunto grande de objetos se comunica de una forma bien definida, pero compleja
- Reutilizar un objeto se hace dificil porque se relaciona con muchos objetos
- Las clases son dificiles de reutilizar porque su funcion basica esta entrelazada con relaciones de dependencia.
Para afirmar este patron unicamente se debe utilizar en casos de que se requiera un procesador central en vez de que cada objeto tenga que conocer la implementacion de otro.
Imaginemos un aeropuerto: ¿Que pasaria si no tuviese una torre de control y los aviones que deban aterrizar/despegar se tiene que poner todos de acuerdo para hacerlo. Contando que cada avion debe conocer los detalles de los otros aviones. Para evitar esto se usa la torre de control que sincroniza el funcionamiento de un aeropuerto. Esta torre podemos apreciarla como mediador entre los aviones
**Mediator:**define una interface para comunicarse con los objetos colegas.
**Mediator_Concreto:**Implementa la interface y define como los colegas se comunican entre ellos. Ademas los conoce y mantiene, con lo cual hace un procesador centrar de cada uno de ellos.
Colleague: Define el comportamiento que debe implementar cada colega para poder comunicarse el mediador de una manera estandarizada para todos.
Colleague_Concreto: Cada colega conoce su mediador, y lo usa para comunicarse con otros colegas. Los colegas envian y reciben requerimientos de un objeto mediador. El mediador gestiona cada mensaje y se lo comunica a otro colega en caso de ser necesario
Ventajas.
- Desacopla a los colegas: el patron Mediator promueve bajar el acoplamiento entre colegas.
- Simplifica la comunicacion entre objetos: aquellos objetos que se comunican de la forma de "muchos a muchos" se pueden remplazar por la forma "uno a muchos" la cual es menos compleja y mas elegante.
- Clarifica los objetos a como se relacionan en el sistema
- Centraliza el control: el patron Mediator es el que se encarga de comunicar a los colegas, esto puede ser complejo.
- Reduce herencia: Con una subclase llamada Mediador cambiamos el comportamiento, que de otra manera estaría distribuido en varios objetos.
Desventajas.
- Complejidad: En la práctica los mediadores tiende a ser más complejo y complejo. Una buena práctica es tomar cuidado para que las clases de mediadores responsables únicamente de la parte de comunicación . Por ejemplo al aplicar las distintas pantallas de la clase la pantalla no debe contener código que no es una parte de las operaciones de la pantalla hay que poner en algunas otras clases .
Sabemos que el patrón Mediator introduce un objeto para mediar la comunicación entre "colegas". Algunas veces el objeto Mediador implementa operaciones simplemente para enviarlas o otros objetos; otras veces pasa una referencia a él mismo y por consiguiente utiliza la verdadera delegación. Entre los colegas puede existir dos tipos de dependencias:
- Un tipo de dependencia requiere un objeto para conseguir la aprobacion de otros objetos antes de hacer tipos especificos en el cambio de estado.
- El otro tipo requiere un objeto para notificar a otros objetos despues de que este ha hecho un tipo especifico de cambios de estado.
Ambos tipos de dependencias son manejadas de un modo similar. Las instancias de Colega1, Colega2, .... están asociadas con un objeto mediator. Cuando ellos quieren conseguir la aprobación anterior para un cambio de estado, llaman a un método del objeto Mediator. El método del objeto Mediator realiza cuidadoso el resto. Pero hay que tener en cuenta lo siguiente con respecto al mediador: Poner toda la dependencia de la lógica para un conjunto de objetos relacionados en un lugar puede hacer incomprensible la dependencia lógica fácilmente. Si la clase Mediator llega a ser demasiado grande, entonces dividirlo en piezas más pequeñas puede hacerlo más comprensible.
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
Ejemplo 1 - Bibliotecas GUI
El ejemplo mediador es un patrón que ya se utiliza en muchas aplicaciones. Uno de los ejemplos es representada por las clases de diálogo en los marcos de las aplicaciones GUI. Una ventana de diálogo es una colección de controles gráficos y no gráficos. La clase de diálogo proporciona el mecanismo para facilitar la interacción entre los controles. Por ejemplo, cuando un nuevo valor se selecciona de un objeto ComboBox una etiqueta tiene que mostrar un nuevo valor. Tanto el cuadro combinado y la etiqueta no son conscientes de la otra estructura y toda la interacción es administrada por el objeto de diálogo. Cada control no tiene conocimiento de la existencia de otros controles.
Ejemplo 2 - aplicación de chat
La aplicación de chat es otro ejemplo del patrón de mediador. En una aplicación de chat que podemos tener varios participantes. No es una buena idea para conectar cada participante a todos los demás porque el número de conexiones sería muy alto, no habría problemas técnicos debido a proxys y cortafuegos, etc .... La solución más adecuada es tener un centro donde todos los participantes se conectarán; este centro es sólo la clase mediador.
###Conclusión
El Mediator se usa para toma el papel de un hub o router y facilita la comunicación entre muchas clases . Una similitud se puede hacer con los sistemas de bases de datos . El mediador transformar una difícil de implementar relación de muchos a muchos , donde cada uno de llamadas tiene que comunicarse con cada otra clase , en 2 relaciones , fácil de implementar, de muchos a uno y uno a muchos , donde la comunicación es manejada por la clase mediador .