💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Mediator
Mediator (Mediador) es un patrón de diseño comportamental que reduce las dependencias caóticas entre objetos, restringiendo las comunicaciones directas entre ellos y forzándolos a colaborar solo a través de un objeto mediador.
Propósito y Caso de Uso
Utiliza Mediator cuando varios componentes necesiten comunicarse entre sí (ej. widgets de un formulario: si cambia el país, se filtran las provincias; si cambia el plan, se recalcula el precio) y esa comunicación directa entre todos ellos genere un grafo de dependencias enredado (N componentes conociéndose entre sí). A diferencia de Observer (broadcast sin coordinación central), Mediator centraliza y coordina explícitamente las reacciones.
Estructura del Patrón
- Mediador (Interfaz): Declara el método de notificación que usan los componentes (
notify()). - Mediador Concreto: Conoce a todos los componentes y coordina la lógica de reacción entre ellos.
- Componentes: Solo conocen al mediador, nunca a los demás componentes directamente.
Flujo de Funcionamiento
- Notificación: Un componente notifica al mediador cuando cambia su estado, sin saber quién reaccionará.
- Coordinación central: El mediador decide qué otros componentes deben actualizarse y cómo.
- Aislamiento: Los componentes permanecen desacoplados entre sí; solo el mediador conoce las reglas de interacción.
Ejemplos de Implementación Reales
interface Mediator {
notify(sender: string, event: string): void;
}
class CountrySelect {
constructor(private mediator: Mediator) {}
select(country: string) { this.mediator.notify('country', country); }
}
class ProvinceSelect {
setProvinces(country: string) { console.log(`Provincias filtradas para ${country}`); }
}
class FormMediator implements Mediator {
provinceSelect = new ProvinceSelect();
notify(sender: string, event: string): void {
if (sender === 'country') {
this.provinceSelect.setProvinces(event); // Coordina la reacción
}
}
}
const mediator = new FormMediator();
const countrySelect = new CountrySelect(mediator);
countrySelect.select('España'); // Provincias filtradas para EspañaCuándo NO usarlo
Si solo dos componentes se comunican de forma simple y estable, introducir un mediador añade una capa de indirección innecesaria (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →).