using System; namespace Test
{
class Program
{
/// <summary>
/// 中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。
/// 中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
AbstractCardPartner A = new ParterA();
AbstractCardPartner B = new ParterB(); // 初始钱
A.MoneyCount = ;
B.MoneyCount = ; AbstractMediator mediator = new MediatorPater(A, B); // A赢了
mediator.AWin();
Console.WriteLine("A 现在的钱是:{0}", A.MoneyCount);
// 应该是25
Console.WriteLine("B 现在的钱是:{0}", B.MoneyCount);
// 应该是15 // B 赢了
mediator.BWin();
Console.WriteLine("A 现在的钱是:{0}", A.MoneyCount);
// 应该是15
Console.WriteLine("B 现在的钱是:{0}", B.MoneyCount);
// 应该是25
Console.Read();
}
} // 抽象牌友类
public abstract class AbstractCardPartner
{
public int MoneyCount { get; set; } public AbstractCardPartner()
{
MoneyCount = ;
} public abstract void ChangeCount(int Count, AbstractMediator mediator);
} // 牌友A类
public class ParterA : AbstractCardPartner
{
// 依赖与抽象中介者对象
public override void ChangeCount(int Count, AbstractMediator mediator)
{
mediator.AWin(Count);
}
} // 牌友B类
public class ParterB : AbstractCardPartner
{
// 依赖与抽象中介者对象
public override void ChangeCount(int Count, AbstractMediator mediator)
{
mediator.BWin(Count);
}
} // 抽象中介者类
public abstract class AbstractMediator
{
protected AbstractCardPartner A;
protected AbstractCardPartner B;
public AbstractMediator(AbstractCardPartner a, AbstractCardPartner b)
{
A = a;
B = b;
} public abstract void AWin(int count);
public abstract void BWin(int count);
} // 具体中介者类
public class MediatorPater : AbstractMediator
{
public MediatorPater(AbstractCardPartner a, AbstractCardPartner b)
: base(a, b)
{
} public override void AWin(int count)
{
A.MoneyCount += count;
B.MoneyCount -= count;
} public override void BWin(int count)
{
B.MoneyCount += count;
A.MoneyCount -= count;
}
}
}