Está en la página 1de 20

Patrón de comportamiento

Mediador
(Mediator)
JOHN CARDONA

J H O N N AT H A M S A L G A D O
Agenda
✓ Motivación
✓ Intención
✓ Aplicabilidad
✓ Estructura
✓ Participantes
✓ Colaboraciones
✓ Implementación
✓ Código ejemplo
✓ Usos conocidos
✓ Patrones relacionados
✓ Ventajas y desventajas
Motivación
En la vida real tenemos cientos de ejemplos de este patrón.
Por ejemplo, si queremos enviar una carta a alguien no la entregamos nosotros
o la vamos pasando a los vecinos a ver si algún día llegase al destino. En lugar de
eso tenemos un intermediario, en este caso la oficina de correos, que se encarga
de recoger los mensajes y entregarlos al destino.

Hoy en día, esto los podemos llevar al uso de los chats en la


cual muchos usuarios se comunican con muchos otros.
¿Cómo implementar una solución para una mensajería instantánea (Chat)?
Motivación
En proyectos grandes podemos llegar a tener un
problema debido a que el número de objetos
aumenta y con esto también aumentan las
relaciones que tienen los objetos con el resto de
los objetos.
Intención
• Define un objeto que encapsula la forma en la cual interactúa un conjunto de
objetos.
• Es especialmente útil cuando tenemos una gran cantidad de objetos que se
comunican de forma directa.
• El mediador promueve el acoplamiento flexible.
Aplicabilidad
¿Cuándo utilizar este patrón?
• Use este patrón cuando sea difícil cambiar algunos objetos porque están
estrechamente acopladas a muchas otras.
• Utilice el patrón cuando aplicar la reutilización de un objeto es difícil, ya que es
dependiente de muchos otros
• Te das cuenta al definir las subclases, que los objetos individuales pueden
participar en relaciones de dependencia a otros.
Estructura
Una estructura típica tiene el siguiente aspecto:
Participantes
• Mediador.

• ConcreteMediator.

• Colleague.

• ConcreteColleague.
Colaboraciones
•Sólo hay comunicación coordinada – mediador
• Los objetos (Colegas) envían y reciben requerimientos (requests) de un objeto mediador.

•El mediador implementa la coordinación


• El mediador implementa el comportamiento cooperativo enrutando las solicitudes entre los
colegas.
Implementación
Hay que tener en cuenta los siguientes temas en la implementación:
•Omitir la clase de Mediador abstracto o interfaz. No es necesario definir una clase de Mediador
abstracto cuando los colegas trabajan con un solo mediador.
•Comunicación colega-mediador. Los colegas tienen que comunicarse con su mediador cuando
ocurre un evento de interés.
•Objeto mediator mantiene su propio modelo interno de los estados de los objetos colega o buscará
el estado de cada objeto cuando necesite conocer el estado del objeto.
Código
ejemplo
Diagrama de secuencia genérico
Usos conocidos
Cuadro hay de diálogo para crear y editar
perfiles de clientes (Formulario)
•Algunos de los elementos del formulario
pueden interactuar con otros.
•Por ejemplo, seleccionar la casilla de
verificación "Tengo un perro" puede revelar un
campo de texto oculto para ingresar el nombre
del perro.
• Otro ejemplo es el botón de enviar que tiene
que validar los valores de todos los campos
antes de guardar los datos.
Usos conocidos
Los pilotos de aeronaves que se acercan o
salen del área de control del aeropuerto
no se comunican directamente entre sí. En
cambio, hablan con un controlador de
tráfico aéreo, que se sienta en una torre
alta en algún lugar cerca de la pista de
aterrizaje.
Usos conocidos
Gestores de cambios
Mantis Bug Tracker: solución para
gestionar tareas en un equipo de
trabajo. En la que muchos usuarios
interacturan unos con otros para enviarse
las incidencias.
Cursos interactivos: Miriadax, Cursera,
Platzi, etc
Patrones relacionados
Los siguientes patrones abordan varias formas de conectar remitentes y receptores de
solicitudes:
◦ Chain of Responsibility pasa una solicitud secuencialmente a lo largo de una cadena dinámica de
receptores potenciales hasta que uno de ellos la maneja.
◦ Command establece conexiones unidireccionales entre remitentes y receptores.
◦ Observer permite a los receptores suscribirse dinámicamente y cancelar la suscripción para recibir
solicitudes.
◦ Mediator elimina las conexiones directas entre remitentes y receptores, obligándolos a comunicarse
indirectamente a través de un objeto mediador.
Patrones relacionados
La diferencia entre Mediador y Observador suele ser esquiva. En la mayoría de los casos, puede
implementar cualquiera de estos patrones; pero a veces puedes aplicar ambos
simultáneamente.
• El objetivo principal de Mediator es eliminar las dependencias mutuas entre un conjunto de
componentes del sistema. En cambio, estos componentes se vuelven dependientes de un único
objeto mediador. El objetivo de Observer es establecer conexiones dinámicas unidireccionales
entre objetos, donde algunos objetos actúan como subordinados de otros.
Patrones relacionados
Facade y Mediator tienen trabajos similares: intentan organizar la colaboración entre muchas
clases muy unidas.
◦ Facade define una interfaz simplificada para un subsistema de objetos, pero no introduce ninguna
funcionalidad nueva. El propio subsistema desconoce la fachada. Los objetos dentro del subsistema
pueden comunicarse directamente.
◦ Mediator centraliza la comunicación entre los componentes del sistema. Los componentes solo conocen
el objeto mediador y no se comunican directamente.
Consecuencias
El patrón Mediator tiene los siguientes beneficios e inconvenientes:
1. Reduce herencia. con una subclase llamada Mediador cambiamos el comportamiento, que de otra manera estaría distribuido
en varios objetos. Las clases de colega se pueden reutilizar tal cual.
2. Desacopla a los colegas. El patrón Mediator promueve bajar el acoplamiento entre objetos. Se puede variar y reusar objetos y
mediadores independientemente.
3. Simplifica los protocolos de objetos. Los objetos que se comunican de la forma "muchos a muchos" puede ser remplazada por
una forma "uno a muchos" entre el mediador y sus colegas. Las relaciones de uno a muchos son más fáciles de entender,
mantener y ampliar.
4. Abstrae cómo cooperan los objetos. Hacer de la mediación un concepto independiente y encapsularlo en un objeto le permite
enfocarse en cómo los objetos interactúan, aparte de su comportamiento individual. Eso puede ayudar a aclarar cómo
interactúan los objetos en un sistema.
5. Principio de responsabilidad única. Puede extraer las comunicaciones entre varios componentes en un solo lugar, lo que facilita
su comprensión y mantenimiento.
6. Principio abierto / cerrado. Puede introducir nuevos mediadores sin tener que cambiar los componentes reales.
7. 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. Debido a que un mediador encapsula los protocolos, puede volverse más complejo que cualquier colega
individual. Esto puede convertir al mediador en sí mismo en un monolito difícil de mantener.
Gracias

También podría gustarte