mediator 中介者模式

来源:互联网 发布:淘宝刷客收入揭秘 编辑:程序博客网 时间:2024/06/05 06:07

意图:

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合

松散,而且可以独立地改变它们之间的交互。

分析:

在做软件设计时我们将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增

又会降低其可复用性。导致这种现象的原因是:大量的连接使得一个对象不可能在没有其他对象的支持

下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了。

“迪米特法则”,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中

一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。以国与国之间的外交为例

如果是国与国之间直接交涉,那么很多事情根本就没法处理。采用“迪米特法则”后就可以将复杂的网络

外交转化为星形外交,无首则乱也正是这个道理。



中介者模式结构:


代码:

abstract class Mediator{public abstract void Send(string message, Colleague colleague);}abstract class Colleague{    protected Mediator mediator;    public Colleague(Mediator mediator){ this.mediator = mediator; }}class ConcreteMediator:Mediator{    private ConcreteColleague1 colleague1;    private ConcreteColleague2 colleague2;    public ConcreteColleague1 Colleague1{      set {colleague1 = value;}    }    public ConcreteColleague2 colleague2{      set {colleague2 = value;}    }    public override void Send(string message, Colleague colleague){      if(colleague == colleague1){        colleague2.Notify(message);      }else{        colleague1.Notify(message);      }    }}class ConcreteColleague1 : Colleague{public ConcreteColleague1(Mediator mediator):base(mediator){}public void Send(string message){ mediator.Send(message, this); }public void Notify(string message){ Console.WriteLine("同事1得到消息:"+ message); }}class ConcreteColleague2 : Colleague{public ConcreteColleague2(Mediator mediator):base(mediator){}public void Send(string message){ mediator.Send(message, this); }public void Notify(string message){ Console.WriteLine("同事2得到消息:"+ message); }}

客户端:

static void Main(string[] args){    ConcreteMediator m=new ConcreteMediator();    ConcreteColleague1 c1=new ConcreteColleague1(m);    ConcreteColleague2 c2=new ConcreteColleague2(m);     m.Colleague1 = c1;    m.Colleague2 = c2;    c1.Send("下班吗?");    c2.Send("好的,一起走。");}

总结:

1,Mediator中的中介者类要知道所有的被介绍者,这样会使得中介这类很庞大,复杂,容易出错,一旦

出错会影响到整个系统。因此判断系统中是否正真需要使用中介者类就变得很重要,当系统中出现“多对

多”交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。

2,mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。

由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对

象就从各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

3,Mediator一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多

个类中的行为,而又不想生成太多的子类的场合。

0 0
原创粉丝点击