Last active
February 21, 2022 11:39
-
-
Save flaviorl-net/3c084df82068c1f93d9a67a0ef5a1b98 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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