Programming - Mediator Behavioral Design Pattern


Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.


and



The classes and/or objects participating in this example are:
  • Mediator
    • defines an interface for communicating with Colleague objects
  • ConcreteMediatorand
    • implements cooperative behavior by coordinating Colleague objects
    • knows and maintains its colleagues
  • Colleague classesand
    • each Colleague class knows its Mediator object
    • each colleague communicates with its mediator whenever it would have otherwise communicated with another colleague
// Mediator pattern -- Structural example

using
System;
using System.Collections;

namespace DoFactory.GangOfFour.Mediator.Structural
{

// Mainapp test application

class MainApp
{
static void Main()
{
ConcreteMediator m = new ConcreteMediator();

ConcreteColleague1 c1 = new ConcreteColleague1(m);
ConcreteColleague2 c2 = new ConcreteColleague2(m);

m.Colleague1 = c1;
m.Colleague2 = c2;

c1.Send("How are you?");
c2.Send("Fine, thanks");

// Wait for user
Console.Read();
}
}

// "Mediator"

abstract class Mediator
{
public abstract void Send(string message,
Colleague colleague);
}

// "ConcreteMediator"

class ConcreteMediator : Mediator
{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;

public ConcreteColleague1 Colleague1
{
set{ colleague1 = value; }
}

public ConcreteColleague2 Colleague2
{
set{ colleague2 = value; }
}

public override void Send(string message,
Colleague colleague)
{
if (colleague == colleague1)
{
colleague2.Notify(message);
}
else
{
colleague1.Notify(message);
}
}
}

// "Colleague"

abstract class Colleague
{
protected Mediator mediator;

// Constructor
public Colleague(Mediator mediator)
{
this.mediator = mediator;
}
}

// "ConcreteColleague1"

class ConcreteColleague1 : Colleague
{
// Constructor
public ConcreteColleague1(Mediator mediator)
: base(mediator)
{
}

public void Send(string message)
{
mediator.Send(message, this);
}

public void Notify(string message)
{
Console.WriteLine("Colleague1 gets message: "
+ message);
}
}

// "ConcreteColleague2"

class ConcreteColleague2 : Colleague
{
// Constructor
public ConcreteColleague2(Mediator mediator)
: base(mediator)
{
}

public void Send(string message)
{
mediator.Send(message, this);
}

public void Notify(string message)
{
Console.WriteLine("Colleague2 gets message: "
+ message);
}
}
}
and
Output expected:
Colleague2 gets message: How are you?
Colleague1 gets message: Fine, thanks



Home | Privacy Policy | Site Map | Links | Company | Contact Us | Arena           

We provide cutting edge software development, consultancy and web design services            

There are currently 653 user(s) with 40645 hits.