中介者模式学习笔记
Mediator :用一个中介对象来封装一系列的对象交付,中介者使各个对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
当然交付的复杂性转变成了中介的复杂性,这就使得终结者会变得比任何一个concretecolleague都复杂。
//调用的主函数
class Program
{
static void Main(string[] args)
{
UnitedNationsSecurityCouncil unsc = new UnitedNationsSecurityCouncil();
USA c1 = new USA(unsc);
Iraq c2 = new Iraq(unsc);
unsc.colleague1 = c1;
unsc.colleague2 = c2;
c1.declare("不允许研制核武器,否则发动战争!");
c2.declare("我们没有核武器,也不怕战争!");
Console.Read();
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Mediator
{
abstract class UniteNations //定义一个抽象联合国类
{
public abstract void declare(string message, Country colleague);
}
abstract class Country //定义一个抽象国家类
{
protected UniteNations mediator; // 这在uml中体现了关联关系
public Country(UniteNations mediator)
{
this.mediator = mediator;
}
}
//美国
class USA : Country
{
public USA(UniteNations mediator)
: base(mediator)
{ }
public void declare(string message)
{
mediator.declare(message, this);
}
public void getmessage(string message)
{
Console.WriteLine("美国获得对方信息!" + message);
}
}
//伊拉克
class Iraq : Country
{
public Iraq(UniteNations mediator)
: base(mediator)
{ }
public void declare(string message)
{
mediator.declare(message, this);
}
public void getmesssage(string message)
{
Console.WriteLine("伊拉克获得对方消息!" + message);
}
}
//现在开始实现联合国安理会
class UnitedNationsSecurityCouncil : UniteNations
{
private USA _colleague1; //安理会和具体的国家产生关联关系。
private Iraq _colleague2;
public USA colleague1
{
set { _colleague1 = value; }
// get { return _colleague1; }
}
public Iraq colleague2
{
// get { return _colleague2; }
set { _colleague2 = value; }
}
public override void declare(string message, Country colleague)
{
if (colleague == _colleague1)
{
_colleague2.getmesssage(message);
}
else
{
_colleague1.getmessage(message);
}
}
}
}
身未动,心已远;有多远,走多远



浙公网安备 33010602011771号