terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat mediator.md
guest@codeandosimple: ~/blog/design-patterns $ cat mediator.md

Mediator Pattern_

// "El aprendizaje es un regalo. Incluso cuando el dolor es tu maestro" - Maya Watson

# Propósito

El patrón Mediator (Mediador) tiene como objetivo reducir la complejidad de las comunicaciones entre múltiples objetos o clases, centralizando la interacción en un solo lugar.

# Problema

  • Alto Acoplamiento: Demasiadas conexiones directas entre clases hacen que el sistema sea frágil.

  • Comunicación Compleja: Difícil de entender y mantener el flujo de mensajes entre múltiples componentes.

# Solución

  • Centralización: Las clases se comunican únicamente a través de un objeto mediador central.

  • Simplificación: El control de la interacción reside en un solo punto, desacoplando los colegas.

# Estructura

Estructura UML Mediator

# Participantes

  • Mediator: Define la interfaz de comunicación.
  • ConcreteMediator: Coordina la comunicación real entre colegas.
  • Colleague: Clase base/interfaz para los componentes.
  • ConcreteColleague: Objetos que se comunican vía el mediador.

# Cuándo Usarlo

Cuando hay muchos objetos interactuando de forma compleja pero bien definida y se quiere centralizar la lógica de comunicación.

# Ventajas

  • verified

    Bajo Acoplamiento: Disminuye dependencias directas.

  • verified

    Mantenibilidad: Cambios en la comunicación en un solo lugar.

# Desventajas

  • warning

    God Object: El mediador puede volverse excesivamente complejo.

  • warning

    Rendimiento: Cuello de botella en sistemas de alta carga.

# Ejemplo: Control de Tráfico Aéreo

Gestión de torre de control, aviones y pistas sin comunicación directa entre aeronaves.

Ejemplo Mediator

# Código Java

interface AirTrafficMediator {
    void register(Component c);
    void send(String msg, Component c);
}

class TowerMediator implements AirTrafficMediator {
    private List<Component> comps = new ArrayList<>();
    public void send(String msg, Component origin) {
        for (Component c : comps) if (c != origin) c.receive(msg);
    }
}

# Mapeo Participantes

  • Tower (Mediator): Punto central de coordinación.
  • Airplane/Runway (Colleagues): Componentes aislados.
  • AirportSystem: Client.

# Conclusiones

Ideal para sistemas donde múltiples objetos deben colaborar sin tener una red de dependencias enmarañada.

# Patrones relacionados

Observer

Mantiene sincronizados a los colegas de forma dinámica.

Facade

Mediator centraliza interacción, Facade simplifica el acceso exterior.