Skip to content

Instantly share code, notes, and snippets.

@flaviorl-net
Last active February 21, 2022 11:39
Show Gist options
  • Save flaviorl-net/3c084df82068c1f93d9a67a0ef5a1b98 to your computer and use it in GitHub Desktop.
Save flaviorl-net/3c084df82068c1f93d9a67a0ef5a1b98 to your computer and use it in GitHub Desktop.
using System;
namespace ConsoleApp1
{
internal class Program
{
public static void Main(string[] args)
{
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
mediator.Colleague1 = colleague1;
mediator.Colleague2 = colleague2;
colleague1.Send("Olá, tudo bem com você?");
colleague2.Send("Sim, e com você?");
Console.ReadKey();
}
}
/// <summary>
/// A interface do Mediator
/// </summary>
public interface IMediator
{
void Send(string message, Colleague colleague);
}
/// <summary>
/// A classe concreta, que implementa a interface IMediator.
/// </summary>
public class ConcreteMediator : IMediator
{
public ConcreteColleague1 Colleague1 { get; set; }
public ConcreteColleague2 Colleague2 { get; set; }
public void Send(string message, Colleague colleague)
{
if (colleague == Colleague1)
{
Colleague2.Notify(message, colleague);
}
else
{
Colleague1.Notify(message, colleague);
}
}
}
/// <summary>
/// A classe base abstrata dos Colleagues
/// </summary>
public abstract class Colleague
{
protected IMediator mediator;
public Colleague(IMediator mediator)
{
this.mediator = mediator;
}
}
/// <summary>
/// A classe concreta Colleague que herda da abastrata
/// </summary>
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(IMediator mediator)
: base(mediator) { }
public void Send(string message)
{
mediator.Send(message, this);
}
public void Notify(string message, Colleague colleague)
{
Console.WriteLine(string.Format("ConcreteColleague1 recebeu a seguinte msg do {1}: {0}", message, colleague.GetType().Name));
}
}
/// <summary>
/// A segunda classe concreta Colleague que herda da abastrata
/// </summary>
public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(IMediator mediator)
: base(mediator) {}
public void Send(string message)
{
mediator.Send(message, this);
}
public void Notify(string message, Colleague colleague)
{
Console.WriteLine(string.Format("ConcreteColleague2 recebeu a seguinte msg do {1}: {0}", message, colleague.GetType().Name));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment