zoukankan      html  css  js  c++  java
  • 我也设计模式——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与其控件的耦合性



  • 相关阅读:
    【转载】分布式之redis复习精讲
    Oracle学习笔记——常用函数总结
    数据库 字段动态添加
    c# form的设定
    C# 单元测试,测试资源管理器里面没有需要的单元测试
    Nvidia--cuda--document
    C# 文件的读取与另存为(WPF)
    java反射概述
    java设计模式:工厂模式
    oracle表被锁定的解决办法
  • 原文地址:https://www.cnblogs.com/Jax/p/913952.html
Copyright © 2011-2022 走看看