• 我也设计模式——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与其控件的耦合性



  • 相关阅读:
    字符串转换成整型数 atoi()
    求一个正整数各个数位上的数字之和
    求小于等于n的所有素数
    iomanip,setw(),setw: undeclared identifier
    计算机界的牛人前辈
    clrscr( )用法
    printf()
    realloc() 用法详解
    ADO和ADO.NET的区别
    C++中delete和delete[]的区别
  • 原文地址:https://www.cnblogs.com/Jax/p/913952.html
Copyright © 2020-2023  润新知