• 前端设计模式之【中介模式】


    前言

    hello world欢迎来到前端的新世界


    😜当前文章系列专栏:前端设计模式
    🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
    💖感谢大家支持!您的观看就是作者创作的动力

    介绍

    • 在中介者模式中,中介者(Mediator)包装了一系列对象相互作用的方式,使得这些对象不必直接相互作用,而是由中介者协调它们之间的交互,从而使它们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化。
    • 中介者模式和观察者模式有一定的相似性,都是一对多的关系,也都是集中式通信,不同的是中介者模式是处理同级对象之间的交互,而观察者模式是处理Observer和Subject之间的交互。中介者模式有些像婚恋中介,相亲对象刚开始并不能直接交流,而是要通过中介去筛选匹配再决定谁和谁见面。

    场景

    例如购物车需求,存在商品选择表单、颜色选择表单、购买数量表单等等,都会触发change事件,那么可以通过中介者来转发处理这些事件,实现各个事件间的解耦,仅仅维护中介者对象即可。

    var goods = {   //手机库存
        'red|32G': 3,
        'red|64G': 1,
        'blue|32G': 7,
        'blue|32G': 6,
    };
    //中介者
    var mediator = (function() {
        var colorSelect = document.getElementById('colorSelect');
        var memorySelect = document.getElementById('memorySelect');
        var numSelect = document.getElementById('numSelect');
        return {
            changed: function(obj) {
                switch(obj){
                    case colorSelect:
                        //TODO
                        break;
                    case memorySelect:
                        //TODO
                        break;
                    case numSelect:
                        //TODO
                        break;
                }
            }
        }
    })();
    colorSelect.onchange = function() {
        mediator.changed(this);
    };
    memorySelect.onchange = function() {
        mediator.changed(this);
    };
    numSelect.onchange = function() {
        mediator.changed(this);
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 聊天室里
      聊天室成员类:
    function Member(name) {
      this.name = name;
      this.chatroom = null;
    }
    
    Member.prototype = {
      // 发送消息
      send: function (message, toMember) {
        this.chatroom.send(message, this, toMember);
      },
      // 接收消息
      receive: function (message, fromMember) {
        console.log(`${fromMember.name} to ${this.name}: ${message}`);
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    聊天室类:

    function Chatroom() {
      this.members = {};
    }
    
    Chatroom.prototype = {
      // 增加成员
      addMember: function (member) {
        this.members[member.name] = member;
        member.chatroom = this;
      },
      // 发送消息
      send: function (message, fromMember, toMember) {
        toMember.receive(message, fromMember);
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试一下:

    const chatroom = new Chatroom();
    const bruce = new Member('bruce');
    const frank = new Member('frank');
    
    chatroom.addMember(bruce);
    chatroom.addMember(frank);
    
    bruce.send('Hey frank', frank);
    
    //输出:bruce to frank: hello frank
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    优缺点

    优点

    • 使各对象之间耦合松散,而且可以独立地改变它们之间的交互
    • 中介者和对象一对多的关系取代了对象之间的网状多对多的关系
    • 如果对象之间的复杂耦合度导致维护很困难,而且耦合度随项目变化增速很快,就需要中介者重构代码

    缺点

    系统中会新增一个中介者对象,因为对象之间交互的复杂性,转移成了中介者对象的复杂性,使得中介者对象经常是巨大的。中介 者对象自身往往就是一个难以维护的对象。

    后言

    创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

  • 相关阅读:
    Linux系统调优详解(十二)——IO调优之磁盘测速
    地线干扰的共阻干扰
    ES6 入门教程 8 函数的扩展 8.2 rest 参数 & 8.3 严格模式
    Android Studio 是如何和我们的手机共享剪贴板的
    用AI魔法打败AI魔法
    SpringBoot整合dubbo(二)
    1544_AURIX_TC275_CPU子系统_存储寻址以及子系统寄存器
    qt 在下安装闪退 退出的解决方案
    learning项目总结
    ClickHouse进阶(十九):clickhouse管理与运维-权限管理
  • 原文地址:https://blog.csdn.net/weixin_68537796/article/details/134424915