namespace RefactoringGuru.DesignPatterns.Mediator.Conceptual
public interface IMediator
void Notify(object sender, string ev);
class ConcreteMediator : IMediator
private Component1 _component1;
private Component2 _component2;
public ConcreteMediator(Component1 component1, Component2 component2)
this._component1 = component1;
this._component1.SetMediator(this);
this._component2 = component2;
this._component2.SetMediator(this);
public void Notify(object sender, string ev)
Console.WriteLine("El mediador reacciona a A y desencadena las siguientes operaciones:");
Console.WriteLine("El mediador reacciona a D y desencadena las siguientes operaciones:");
protected IMediator _mediator;
public BaseComponent(IMediator mediator = null)
this._mediator = mediator;
public void SetMediator(IMediator mediator)
this._mediator = mediator;
class Component1 : BaseComponent
Console.WriteLine("El Componente 1 hace A.");
this._mediator.Notify(this, "A");
Console.WriteLine("El Componente 1 hace B.");
this._mediator.Notify(this, "B");
class Component2 : BaseComponent
Console.WriteLine("El Componente 2 hace C.");
this._mediator.Notify(this, "C");
Console.WriteLine("El Componente 2 hace D.");
this._mediator.Notify(this, "D");
static void Main(string[] args)
Component1 component1 = new Component1();
Component2 component2 = new Component2();
new ConcreteMediator(component1, component2);
Console.WriteLine("El cliente desencadena la operación A.");
Console.WriteLine("El cliente desencadena la operación D.");