我也设计模式——19.Mediator

中介者的神奇在于我们天天在使用却丝毫感觉不到:WindowsForm和WebForm


如果说Observer是一种1对多的模式,那么中介者就是一种多对多的模式,是Observer更普遍的方式。
    现实中最好的事例就是房屋中介所:某人想买房子,这期间要办理一大堆手续,会把买卖双方都搞死的,尤其是买方。于是中介机构出现了,买方只面对中介,中介会为其办理所有手续。当买方的人越来越多时,中介的作用越来越明显。


我们把中介者的UML图变一下形状,可以得到:

于是我们得到了Observer的改良版,只是多了一个继承于Colleague的子类ConcreteColleague2,这说明:

    1.由于ConcreteMediator其实是一个具体的Observer,而它又添加了对ConcreteColleague2的引用,所以ConcreteColleague2也可以看作是一个具体的Observer

    2.每个ConcreteColleague都能成为被观察的对象Subject,也能作为观察者Observer中的一员

    3.对应于不同的被观察对象Subject,ConcreteMediator可以有多个Update()方法,由Update()方法决定引起哪些Observer变化:

        比如说上图,ConcreteColleague1作为Subject,对应Update(),该方法中可以操纵c2:    c2.DoSomething2();

        如果又以ConcreteColleague2作为Subject,对应Update2(),该方法同时操纵c2和c3:      c3.Domething3(); c2.DoSomething2();————这里c3为另一个ConcreteColleague3对象


下面我们看Form窗体,这是基于委托来实现的:

虽然所有的控件的基类都是Control,但有可能不是直接派生的————即可能是祖孙辈份,所以使用委托可以解除Control与其控件的耦合性



原文地址:https://www.cnblogs.com/Jax/p/913952.html