中介者模式 -- 大话设计模式
在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变它们之间的交互
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("我们没有核武器,也不怕侵略!");
}

浙公网安备 33010602011771号