您的位置:首页 > 其它

设计模式阅读备忘笔记-中介者模式

2017-09-30 11:53 288 查看

设计模式阅读备忘笔记-中介者模式

中介者模式(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");
}
}


总结:为已有的功能动态添加更多的功能的一种方式,比如新加的功能和字段仅仅是为了满足一些只在某种特定情况下才会执行的特殊需求,就可以使用装饰模式,把新功能单独写在装饰类中,并用装饰类装饰原来的对象,优点是可以把类中的核心职责和装饰功能分开,简化类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式