设计模式阅读备忘笔记-中介者模式
中介者模式(Mediator)
理解:
Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。
由于把对象如何协作进行了抽象,将中介作为一个独立地概念并将其封装再一个都想中,这样关注地对象就从对象各自本身地行为装换到它们之间地交互上来,也就是站在一个更宏观地角度去看待系统。
代码例子:
//抽象中介者类
abstract class Mediator
{
public abstract void Send(string msg, Colleague colleague);
}
//抽象同事类
abstract class Colleague
{
protected Mediator mediator;
public Colleague(Mediator mediator)
{
this.mediator = mediator;
}
}
class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(Mediator mediator)
:base(mediator)
{
}
public void Send(string msg)
{
mediator.Send(msg, this);
}
public void Notity(string message)
{
Console.WriteLine(1+ message);
}
}
class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(Mediator mediator)
: base(mediator)
{
}
public void Send(string msg)
{
mediator.Send(msg, this);
}
public void Notity(string message)
{
Console.WriteLine(2+ message);
}
}
//具体中介者类
class ConcreteMediator : Mediator
{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
internal ConcreteColleague1 Colleague1
{
set
{
colleague1 = value;
}
}
internal ConcreteColleague2 Colleague2
{
set
{
colleague2 = value;
}
}
public override void Send(string msg, Colleague colleague)
{
}
}
class Test
{
void Main()
{
ConcreteMediator m = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1(m);
ConcreteColleague2 c2 = new ConcreteColleague2(m);
m.Colleague1 = c1;
m.Colleague2 = c2;
c1.Send("msg");
c2.Send("msg");
}
}