using System;
using System.Collections.Generic;
namespace TestCSharp
{
class Program
{
static void Main(string[] args)
{
President president = new President();
Market market = new Market(president);
Development develop = new Development(president);
president.SetDepartments(develop, market);
develop.Process();
develop.FinishDevelop();
develop.Process();
Console.ReadKey();
}
abstract class Mediator
{
public abstract void Process();
}
class President : Mediator
{
Market m_Market;
Development m_Develop;
public void SetDepartments(Development development, Market market)
{
m_Market = market;
m_Develop = development;
}
public override void Process()
{
if (m_Develop.HasFinishDevelop)
{
m_Market.Promote();
}
else
{
m_Develop.ContinueDevelop();
}
}
}
abstract class Department
{
protected Mediator m_Mediator;
public Department(Mediator mediator)
{
m_Mediator = mediator;
}
}
class Development : Department
{
public bool HasFinishDevelop { private set; get; }
public Development(Mediator mediator)
: base(mediator)
{
}
public void Process()
{
m_Mediator.Process();
}
public void FinishDevelop()
{
HasFinishDevelop = true;
}
public void ContinueDevelop()
{
Console.WriteLine("continue develop the product. ");
}
}
class Market : Department
{
public Market(Mediator mediator)
: base(mediator)
{
}
public void Process()
{
m_Mediator.Process();
}
public void Promote()
{
Console.WriteLine("promote the product. ");
}
}
}
}