Design Patterns — Parte 19 — Mediator

Jones Roberto
Jan 10 · 4 min read

Intenção

É um padrão de design comportamental que permite reduzir dependências caóticas entre objetos. O padrão restringe as comunicações diretas entre os objetos e os força a colaborar apenas por meio de um objeto mediador.

Problema

Queremos projetar componentes reutilizáveis, mas as dependências entre as peças potencialmente reutilizáveis ​​demonstram o fenômeno “código espaguete” (tentar colher uma única porção resulta em um “conjunto de tudo ou nada”).

Solução

O padrão mediator sugere que você interrompa toda a comunicação direta entre os componentes que deseja tornar independentes um do outro. Em vez disso, esses componentes devem colaborar indiretamente, chamando um objeto mediator especial que redireciona as chamadas para os componentes apropriados. Como resultado, os componentes dependem apenas de uma única classe de mediator em vez de serem acoplados a dezenas de classes.

Implementação

O diagrama de classes UML para a implementação do Padrão de Design do Mediador é apresentado abaixo:

Prós

  • Princípio de responsabilidade única . Você pode extrair as comunicações entre vários componentes em um único local, facilitando a compreensão e a manutenção.
  • Princípio Aberto / Fechado . Você pode introduzir novos mediadores sem precisar alterar os componentes reais.
  • Você pode reduzir o acoplamento entre vários componentes de um programa.
  • Você pode reutilizar componentes individuais mais facilmente.

Contras

Com o tempo, um mediator pode evoluir para um Objeto Divino.

Exemplo

Uso do padrão

O que é oque?

Mediator

Essa é uma interface que define operações que podem ser chamadas pelos objetos colegas para comunicação.

ConcreteMediator

Esta é uma classe que implementa as operações de comunicação da interface do Mediador.

Colleague

Esta é uma classe que define um único campo protegido que mantém uma referência a um mediador.

ConcreteColleagueA / B

Estas são as classes que se comunicam através do mediador.

Diagrama de classes

Exemplo prático

Bom vamos para o nosso exemplo, como sempre vou tentar criar um exemplo mais simples possível, lembrando que nem sempre é possível.

Primeiramente irei criar a interface IMediator, que irá conter o seguinte código:

em seguida irei criar a classe abstrata Colleague, que irá conter o seguinte código:

agora vou criar duas classes concretas que irão herdar de Colleague:

  • ConcreteColleagueA, que irá conter o seguinte código:
  • ConcreteColleagueB, que irá conter o seguinte código:

E por fim vou criar nosso ConcreteMediator que irá implementar nossa interface IMediator, e que irá conter o seguinte código:

E por fim irei alterar nossa classe Program.cs para que seja possível testar nosso Mediator, e ela irá conter o seguinte código:

Bom pessoal, espero que o exemplo fique claro e que vocês consigam levar esse exemplo para o mundo real, tirando strategy, mediator é meu padrão favorito, e ele acabou me ajudando algumas vezes. Vou ficando por aqui até a próxima pessoal.


XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

Jones Roberto

Written by

Gerente de Desenvolvimento na XP Inc. , jogador de vídeo game, viciado em séries e .Net.

XP Inc.

XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

More From Medium

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 22 —State

Jones Roberto
Feb 19 · 4 min read

1

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 21 — Observer

Jones Roberto
Feb 4 · 4 min read

1

More on Xp Inc from XP Inc.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade