← Back to home

Mediator

By Pscodium · 8/4/2026 · 3 views

Mediator

O Mediator é um padrão comportamental que centraliza a comunicação entre vários objetos.

Sem Mediator, podemos ter:

A ↔ B
A ↔ C
A ↔ D
B ↔ C
B ↔ D
C ↔ D

Conforme o sistema cresce, os objetos ficam fortemente acoplados.

Com Mediator:

       A
       │
       ↓
B → Mediator ← C
       ↑
       │
       D

Os objetos não conversam diretamente entre si.


Exemplo

Criamos o Mediator:

interface ChatMediator {
  send(
    message: string,
    sender: User
  ): void;
}

Implementação:

class ChatRoom
  implements ChatMediator {

  private users: User[] = [];

  addUser(user: User) {
    this.users.push(user);
  }

  send(
    message: string,
    sender: User
  ) {
    for (const user of this.users) {
      if (user !== sender) {
        user.receive(message);
      }
    }
  }
}

Agora o usuário:

class User {

  constructor(
    private name: string,
    private mediator:
      ChatMediator
  ) {}

  send(message: string) {
    this.mediator.send(
      message,
      this
    );
  }

  receive(message: string) {
    console.log(
      `${this.name} recebeu: ${message}`
    );
  }
}

Uso:

const chat =
  new ChatRoom();

const joao =
  new User(
    "João",
    chat
  );

const maria =
  new User(
    "Maria",
    chat
  );

chat.addUser(joao);
chat.addUser(maria);

João envia:

joao.send(
  "Olá, Maria!"
);

O Mediator decide quem recebe a mensagem.


Exemplo real: Interface gráfica

Imagine um formulário:

Checkbox
    ↓
Mediator
    ↓
Input
    ↓
Mediator
    ↓
Button

Quando o usuário marca um checkbox, o Mediator pode ativar um botão.

O Checkbox não precisa conhecer diretamente o Button.


Quando usar?

Mediator é útil quando:

  • Muitos objetos precisam se comunicar.
  • As dependências entre objetos estão crescendo.
  • Queremos reduzir acoplamento.
  • Existe uma lógica central de comunicação.

Exemplos:

Chat
Interfaces gráficas
Sistemas de eventos
Orquestração de workflows
Sistemas de comunicação

A ideia principal é:

Centralizar a comunicação complexa entre objetos em um objeto intermediário.



Comments

No comments yet.