zoukankan      html  css  js  c++  java
  • 中介者模式(Mediator)---行为型

     1 基础知识

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

    本质:封装交互

    使用场景:(1)如果一组对象之间的通信方式比较复杂,导致相互依赖、结构混乱,可以采用中介者模式,把这些对象相互的交互管理起来,各个对象都只需要和中介者交互,从而使得各个对象松散耦合,结构也更清晰易懂。

    (2)如果一个对象引用很多的对象,并直接跟这些对象交互,导致难以复用该对象,可以采用中介者模式,把这个对象跟其他对象的交互封装到中介者对象里面,这个对象只需要和中介者对象交互就可以了。 

    优点:

    (1)松散耦合

        中介者模式通过把多个同事对象之间的交互封装到中介者对象里面,从而使得同事对象之间松散耦合,基本上可以做到互不依赖。这样一来,同事对象就可以独立地变化和复用,而不再像以前那样“牵一发而动全身”了。

    (2)集中控制交互

        多个同事对象的交互,被封装在中介者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改中介者对象就可以了,当然如果是已经做好的系统,那就扩展中介者对象,而各个同事类不需要做修改。

    (3)多对多变成一对多

        没有使用中介者模式的时候,同事对象之间的关系通常是多对多的,引入中介者对象以后,中介者对象和同事对象的关系通常变成了双向的一对多,这会让对象的关系更容易理解和实现。

    缺点:过度集中化。如果同事对象的交互非常多,而且比较复杂,当这些复杂性全部集中到中介者的时候,会导致中介者对象变得十分复杂,而且难于管理和维护。

     2 代码示例

    使用场景:在qq群中,有许多个对象发信息,但都是在群中显示的,此时这个qq群就相当于一个中介者。

    学习群:StudyGroup

    public class StudyGroup {
        
        //展示每个对象发送的信息,并对信息做了封装
        public static void showMessage(User user,String message){
            System.out.println(new Date().toString()+"["+user.getName()+" "+"message: "+message+"]");
        }
    }

    用户对象:User

    public class User {
        private String name;
    
        public User(String name){
            this.name = name;
        }
        //发送了一个消息,让中介者去展示
        public void sendMessage(String message){
            StudyGroup.showMessage(this,message);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    应用层:

    public class Test {
        public static void main(String[] args) {
            User a = new User("a");
            User b = new User("b");
    
            a.sendMessage("123");
            b.sendMessage("456");
        }
    }

    4 相关模式

    (1)中介者模式和外观模式

         这两个模式有相似的地方,也存在很大的不同外观模式多用来封装一个子系统内部的多个模块,目的是向子系统外部提供简单易用的接口。也就是说外观模式封装的是子系统外部和子系统内部模块间的交互;而中介者模式是提供多个平等的同事对象之间交互关系的封装,一般是用在内部实现上另外,外观模式是实现单向的交互,是从子系统外部来调用子系统内部,不会反着来;而中介者模式实现的是内部多个模块间多向的交互

    (2)中介者模式和观察者模式

        这两个模式可以组合使用。中介者模式可以组合使用观察者模式,来实现当同事对象发生改变的时候,通知中介对象,让中介对象去进行与其他相关对象的交互。

  • 相关阅读:
    nodejs微服务健康检查方案
    RabbitMQ inequivalent arg 'durable' for exchange 'csExchange' in vhost '/': received
    python 虚拟环境
    gulp-babel使用
    node-schedule定时任务
    微信小程序分包(附微信小程序开发学习手册)
    抖音、腾讯、京东、阿里等大厂性能优化方案总结(含项目实战分析及视频)
    微信小程序绘制二维码(附微信小程序开发学习手册)
    【纯干货分享】拒绝卡顿,揭秘盒马鲜生 APP Android 短视频秒播优化方案
    碰壁五次!我闭关28天啃完这些书,再战拿下腾讯,爱奇艺,小红书,快手等10家大厂!化身offer收割机!
  • 原文地址:https://www.cnblogs.com/youngao/p/11401213.html
Copyright © 2011-2022 走看看