Mediator
Mediator
Mediator
Unicomfacauca
Resumen
El patrón Mediator puede ser útil para diseñar una comunicación controlada y coordinada entre
grupos de objetos, eliminando la necesidad de una comunicación directa
Descripción
En general, una aplicación orientada a objetos consiste de un conjunto de objetos que interactúan con el
fin de proveer un servicio. Esta interacción puede ser directa (punto a punto). La Figura 1 muestra este
tipo de interacción entre un ObjetoA y un ObjetoB.
1
Ingeniería del Software II
Unicomfacauca
Figura 3: Interacción de objetos: Mediator como centro de comunicación
El patrón mediator sugiere una abstracción de la interacción de todos los objetos, en una clase separada
llamada Mediator, que tiene el conocimiento de la interacción de un grupo de objetos. Cada objeto del
grupo es responsable de ofrecer los servicios, pero los objetos no interactúan unos con otros
directamente para este propósito. La interacción entre dos objetos es enrutada a través de la clase
Mediator. Todos los objetos envían sus mensajes al Mediator. El Mediator envía los mensajes
apropiados a los objetos. Este diseño tiene las siguientes ventajas:
• Es más fácil alterar el comportamiento de las relaciones entre los objetos, reemplazando el
mediador con una de sus subclases, con una funcionalidad extendida o alterada.
• Mover las dependencias entre los objetos fuera de los objetos individuales favorece la
reutilización.
• Debido a que los objetos no se comunican unos con otros directamente, es más fácil hacer
unidades de prueba de los objetos.
• Debido al bajo acoplamiento es más fácil modificar las clases individuales sin afectar las otras
clases.
En conclusión, 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. Imaginemos un aeropuerto:
que pasaría si no tuviese una torre de control y todos los aviones que deban aterrizar/despegar se tienen
que poner todos de acuerdo para hacerlo. Además cada avión debe conocer detalles de otros aviones
(velocidad de despegue, nafta que le queda a cada uno que quiera aterrizar, etc).
Para evitar esto se utiliza una torre de control que sincroniza el funcionamiento de un aeropuerto. Esta
torre de control se puede ver como un mediador entre aviones.
Ejemplo
Un diagrama general del patrón Mediator se muestra en la Figura 4. A continuación se explica cada
clase.
3
Ingeniería del Software II
Unicomfacauca
public void envia(String a, String msg);
}
// Constructor
public Usuario(SalonDeChat salonDeChat) {
this.salon = salonDeChat;
}
import java.util.HashMap;
public class SalonDeChat implements ISalonDeChat {
private HashMap<String,Usuario> participantes = new HashMap<String,
Usuario>();
4
Ingeniería del Software II
Unicomfacauca
Usuario u = new Usuario(salon);
u.setNombre("Juan");
salon.registra(u);
//envia(a, msg);
u.envia("Pepe", "Hola como andas?");
u1.envia("Juan", "Todo ok, vos?");
u2.envia("Juan", "Juan como te va?");