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.

public interface IMediator
{
void SendMessage(Colleague caller, string msg);
}
public abstract class Colleague
{
protected IMediator _mediator;

public Colleague(IMediator mediator)
{
_mediator = mediator;
}
}
public class ConcreteColleagueA : Colleague
{
public ConcreteColleagueA(IMediator mediator) : base(mediator) { }

public void Send(string msg)
{
Console.WriteLine("A send message:" + msg);
_mediator.SendMessage(this, msg);
}

public void Receive(string msg)
{
Console.WriteLine("A receive message:" + msg);
}
}
public class ConcreteColleagueB : Colleague
{
public ConcreteColleagueB(IMediator mediator) : base(mediator) { }

public void Send(string msg)
{
Console.WriteLine("B send message:" + msg);
_mediator.SendMessage(this, msg);
}

public void Receive(string msg)
{
Console.WriteLine("B receive message:" + msg);
}
}
public class ConcreteMediator : IMediator
{
public ConcreteColleagueA Colleague1 { get; set; }

public ConcreteColleagueB Colleague2 { get; set; }

public void SendMessage(Colleague caller, string msg)
{
if (caller == Colleague1)
Colleague2.Receive(msg);
else
Colleague1.Receive(msg);
}
}
class Program
{
static void Main(string[] args)
{
ConcreteMediator mediator = new ConcreteMediator();
mediator.Colleague1 = new ConcreteColleagueA(mediator);
mediator.Colleague2 = new ConcreteColleagueB(mediator);
mediator.SendMessage(mediator.Colleague1, "Message mediator 1");
mediator.SendMessage(mediator.Colleague2, "Message mediator 2");
Console.WriteLine("Press any key to continue!");
Console.ReadKey();
}
}

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 21 — Observer

Jones Roberto
Feb 4 · 4 min read

1

More on Xp Inc from XP Inc.

More on Design Patterns from XP Inc.

More on Design Patterns from XP Inc.

Design Patterns — Parte 18 — Iterator

Jones Roberto
Jan 2 · 4 min read
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