您的位置:首页 > 其它

中介者模式 -- 大话设计模式

2015-11-05 14:43 387 查看
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互

1.美国警告伊拉克

  联合国安全理事会成立,美国伊拉克都加入了理事会。理事会连线美国和伊拉克,在谈判桌上,美国声明:“不准研制核武器,否则要发动战争!”,伊拉克声明:“我们没有核武器,也不怕侵略!”

  定义中介者抽象类--联合国和抽象国家类

/// <summary>
/// 联合国(中介者抽象类)
/// </summary>
public abstract class Mediator
{
/// <summary>
/// 声明
/// </summary>
public abstract void Declare(string message, Country colleague);
}

/// <summary>
/// 抽象国家类
/// </summary>
public abstract class Country
{
protected Mediator mediator;

public Country(Mediator mediator)
{
this.mediator = mediator;
}
}


  定义美国和伊拉克两个国家类,加入联合国

/// <summary>
/// 美国
/// </summary>
public class USA : Country
{
public USA(Mediator mediator) : base(mediator) { }

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

public void GetMessage(string message)
{
Console.WriteLine("美国获得对方消息:" + message);
}
}

/// <summary>
/// 伊拉克
/// </summary>
public class Iraq : Country
{
public Iraq(Mediator mediator) : base(mediator) { }

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

public void GetMessage(string message)
{
Console.WriteLine("伊拉克获得对方消息:" + message);
}
}


  定义具体中介者(调停者)--联合国安全理事会

/// <summary>
/// 联合国安全理事会
/// </summary>
public class ConcreteMediator : Mediator
{
public USA USA { get; set; }

public Iraq Iraq { get; set; }

public override void Declare(string message, Country colleague)
{
if (colleague == USA)
{
Iraq.GetMessage(message);
}
else
{
USA.GetMessage(message);
}
}
}


  开启场景模拟

static void Main(string[] args)
{
//联合国安全理事会成立
ConcreteMediator UNSC = new ConcreteMediator();

//美国加入
USA c1 = new USA(UNSC);

//伊拉克加入
Iraq c2 = new Iraq(UNSC);

//理事会连线美国和伊拉克
UNSC.USA = c1;
UNSC.Iraq = c2;

//美国声明
c1.Declare("不准研制核武器,否则要发动战争!");

//伊拉克声明
c2.Declare("我们没有核武器,也不怕侵略!");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: