# Mediator

Um Mediator (mediador em português), em linguagem de programação de computadores, é um dos 23 Padrões de Projeto (Design Pattern) indicados para descritos para aumentar re-uso e diminuir acoplamento.

## Definição

É um padrão de projeto usado frequentemente quando deseja-se encapsular como os objetos interagem, ou seja, a comunicação entre os objetos é estabelecida através do Mediator. Este padrão é considerado um padrão comportamental, pois o padrão pode alterar o comportamento da aplicação (programa).O Mediator promove o fraco acoplamento ao evitar que objetos se referiram uns aos outros explicitamente.

## Participantes

Mediator: responsável por definir a interface para a comunicação entre os objetos Colegas.
MediatorConcreto: responsável por implementar a interface Mediator e consequentemente gerenciar a comunicação entre os objetos Colegas.
ColegaConcreto: Objeto que se comunicará com outros objetos Colegas através do Mediator.

## Exemplo base

Uma das inúmeras formas de demonstrar o padrão Mediator é fazendo uma analogia com uma torre de comando do aeroporto. Considere dois pilotos de avião, um está aterrissando e outro está decolando, eles se comunicam de forma direta? A resposta é não. As mensagens são todas controladas pela torre de controle, que possuí a responsabilidade de gerenciar quem decola e quem aterrissa. As restrições de decolagem e aterrissagem ficam por conta da torre de controle.
Observe que neste exemplo têm-se os participantes do padrão. O MediatorConcreto é a torre de controle e como ColegaConcreto os pilotos de avião. É importante ressaltar que a torre de controle não controla o voo por completo.

### Exemplo de diagrama aplicando o Mediator para um caso de debate político

No diagrama acima, a situação é a seguinte: Considere um debate político, onde ocorre troca de mensagens bem definidas, porém essas mensagens são relativamente complexas já que um político pode se comunicar(enviar mensagem) para qualquer outro político que esteja no debate, logo, é necessário alguém que seja capaz de intermediar as mensagens para que o debate flua de uma melhor forma. É neste ponto que entra o apresentador (ApresentadorMediator) que será justamente o mediador entre os políticos e que consequentemente intermediará as mensagens de uma melhor forma, tornando o debate mais agradável e compreensível.

## Quando usar

Um conjunto de objetos se comunicam de maneira bem definida, porém complexas o que dificulta o entendimento.
Quando um objeto é difícil de ser reutilizado pois ele se referencia e se comunica com muitos outros objetos.
Quando um comportamento está distribuído entre diversas classes que deveria ser customizável, evitando a especialização em subclasses.

## Vantagens do padrão Mediator

Diminuí consideravelmente o acoplamento (entre os Colegas) e consequentemente aumenta o reuso.
Ocorre a eliminação de relacionamentos muitos para muitos (N para N)
A política de comunicações fica centralizada no Mediator, logo, podemos alterar essa política sem precisar alterar os Colegas.

## Desvantagens do padrão Mediator

Em termos práticos a tendência do padrão Mediator é tornar-se complexo.A troca de complexidade, inicialmente na interação e, após a aplicação do padrão, a complexidade passa a ficar no Mediator o que dificulta a manutenção.

## Padrões relacionados

Observer e Façade.