美文网首页javaJava随笔-生活工作点滴
java设计模式-中介者模式(Mediator)

java设计模式-中介者模式(Mediator)

作者: yiqiquhuxi | 来源:发表于2019-08-09 11:26 被阅读44次

    中介者模式,属于行为型模式;定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

    在java中,类和类的关系几乎都是多对多的关系。这种类和类的交互,非常错综复杂,如果不懂逻辑会看的眼花缭乱,因为耦合性太高了。我们不如弄一个专门的中介,所有的类的都与这个中介进行交互,让这个中介调用其他的类呢?这样的类和类的交互从多对多,变成了一对多;减少了耦合。

    注意,这里的中介,和我们现实生活中的这中介意思几乎一模一样,比如:
    1:婚介所,你只需要把资料交给中介,中介在对其他多个对象进行筛选。
    2:房屋中介,你只需要把房屋信息提交给中介,由中介寻找多个买方。
    因为他们都有专门的中介进行交互,所有的后续的事情,都交给了中介,他们只需要和中介这一个单位打交道就行。


    中介者模式UML图:

    中介者模式模型图

    Colleague:同事接口,就是我们需要交互对象的抽象类。
    ConcreteColleague:同事类,具体需要交互的类。
    Mediator:中介者抽象类(当然也可以不需要抽象类,直接使用中介者具体类也行)。
    ConcreteMediator:中介者具体类


    Demo:
    开会的目的就是让大家聚在一起,传达一些精神给所有人,一个人说,其他人听就行,当然也可以轮流说,而不是私下一个一个的去交流,大家一起开会,极大的节省了交流的时间。直接上图:

    Colleague:同事抽象类(Colleague)

    同事抽象类

    Zhangsan:同事具体类(ConcreteColleague)

    同事具体类

    Lisi:同事具体类(ConcreteColleague)

    同事具体类

    Mediator:抽象中介者类(Mediator)

    抽象中介者类

    ConcreteMediator:具体中介者类

    具体中介者

    测试结果:

    结果

    以上例子:具体中介者类(ConcreteColleague),管理了所有的同事(Colleague),所有同事在这里面进行注册(registry方法),并对一些同事的动作(say方法),给其他同事做出反应(listen方法)。

    一般情况下,我们中介者可以写成单例模式,不需要使用Mediator抽象类。


    Java实例:

    java中几乎所有的”池“技术(数据库连接池,缓冲池,线程池),中心(调度中心,配置中心等等)都会用到了中介者模式:

    1:线程池Executor,持有Runnable的引用,对Runnable进行execute,submit,shutdown等等操作。
    2:数据库连接池(ConnectionPool),持有各个链接对象(Connection)。

    相关文章

      网友评论

        本文标题:java设计模式-中介者模式(Mediator)

        本文链接:https://www.haomeiwen.com/subject/jtscjctx.html