• 中介者模式Mediator


    中介者模式:用一个中介对象封装一些列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    举例:在一个公司里面,有很多部门、员工,为了完成一定的任务,“同事”之间肯定有许多需要互相配合、交流的过程。如果由各个“同事”频繁地到处去与自己有关的“同事”沟通,这样肯定会形成一个多对多的杂乱的联系网络而造成工作效率低下。此时就需要一位专门的“中介者”给各个“同事”分配任务,以及统一跟进大家的进度并在“同事”之间实时地进行交互,保证“同事”之间必须的沟通交流。很明显我们知道此时的“中介者”担任了沟通“同事”彼此之间的重要角色了,“中介者”使得每个“同事”都变成一对一的联系方式,减轻了每个“同事”的负担,增强工作效率。

    所以中介者模式适用场景:

    1、一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。

    2、一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

    3、想定制一个分布在多个类中的行为,而又不想生成太多的子类。

    中介者就是一个处于众多对象,并恰当地处理众多对象之间相互之间的联系的角色。

    package com.qinsoft.design;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 中介者模式:行为型
     */
    public class Mediator
    {
    
        public static void main(String[] args)
        {
            Tertium mediator = new Tertium();
    
            Workman trac = new Workman("wesen",mediator);
            Workman mali = new Workman("mali",mediator);
    
            mediator.add(trac);
            mediator.add(mali);
            mediator.order("have a rest!");
            mediator.clear();
    
        }
    }
    
    class Workman
    {
        private String name;
        private Tertium mediator;
    
        //构造函数必把把中介者注入
        public Workman(String name, Tertium mediator)
        {
            this.name = name;
            this.mediator = mediator;
        }
    
        //业务动作,相互通信息动作
        public void getOrder(String orders)
        {
            System.out.println(this.name + "," + orders);
        }
    }
    
    /**
     * 中介者
     */
    class Tertium
    {
        //提供参与者list,把参与通信的对象注册进来,注册动作也可放进参与者对象当中
        private List<Workman> works = new ArrayList<Workman>();
    
        public void add(Workman workman)
        {
            works.add(workman);
        }
    
        public void clear()
        {
            works.clear();
        }
        //统一通信动作通过中介
        public void order(String orders)
        {
            for(Workman m : works)
            {
                m.getOrder(orders);
            }
        }
    }

    在结构上,中介者模式与观察者模式、命令模式都添加了中间对象——只是中介者去掉了后两者在行为上的方向。因此中介者的应用可以仿照后两者的例子去写。但是观察者模式、命令模式中的观察者、命令都是被客户所知的,具体哪个观察者、命令的应用都是由客户来指定的;而大多中介者角色对于客户程序却是透明的。当然造成这种区别的原因是由于它们要达到的目的不同。

    从目的上看,中介者模式与观察者模式、命令模式便没有了任何关系,倒是与外观模式有些相似。但是外观模式是介于客户程序与子系统之间的,而中介者模式是介于子系统与子系统之间的。这也注定了它们有很大的区别:外观模式是将原有的复杂逻辑提取到一个统一的接口,简化客户对逻辑的使用。它是被客户所感知的,而原有的复杂逻辑则被隐藏了起来。而中介者模式的加入并没有改变客户原有的使用习惯,它是隐藏在原有逻辑后面的,使得代码逻辑更加清晰可用。

  • 相关阅读:
    详解并发和并行意义
    MoleHill Getting Started AGAL(转)
    解决setInterval计时器不准的问题
    Flash视频播放器开发经验总结
    利用pushState开发无刷页面切换
    用小乐图客抓取人人网照片
    如何在Flash中新窗口打开页面而不被拦截
    响应式开发总结
    用Asroute解决复杂状态切换问题
    对iframe跨域通信的封装
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2748410.html
Copyright © 2020-2023  润新知