JS_中介者模式

JS_中介者模式

我们从日常的生活中打个简单的比方,我们去房屋中介租房,房屋中介人在租房者和房东出租者之间形成一条中介。租房者并不关心他租谁的房。房东出租者也不关心他租给谁。因为有中介的存在,这场交易才变得如此方便。

在软件开发中,中介者是一个行为设计模式,通过提供一个统一的接口让系统的不同部分进行通信。一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过该中央控制点进行交互。中介这模式可以让这些子模块不需要直接沟通,而达到解耦的目的 。

如下案例,两个obj1之间相互引用,但是各自又相互独立,将其中一个对象删除时,不会影响其他对象。

需要注意的是:

  1. 事件回调函数写在事件侦听addEventListener中,这个函数不能写return,不能传参,有且只有一个参数,这个参数就是事件对象
  2. 用dispatchEvent()来触发该事件侦听函数,系统事件一般在实际触发时由系统自动抛发事件,不需要我们手动抛发,当然也可以随时触发它
var et = new EventTarget();

var obj1 = {
    a: 1,
    init: function() {
        et.addEventListener("aa", this.calls);
        et.a = this.a;
    },
    calls: function(e) {
        console.log(e);
        var evt = new Event("bb");
        evt.a = this.a;
        et.dispatchEvent(evt);
    }
}

var obj2 = {
    b: 2,
    init: function() {
        et.addEventListener("bb", this.calls);
        var evt = new Event("aa");
        evt.b = this.b;
        et.dispatchEvent(evt);
    },
    calls: function(e) {
        console.log(e);
    }
}

obj1.init();
obj2.init();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,555评论 1 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,157评论 1 32
  • 工厂模式 单体模式 模块模式 代理模式 职责链模式 命令模式 模板方法模式 策略模式 发布-订阅模式 中介者模式 ...
    HelloJames阅读 1,028评论 0 6
  • 设计模式 单例 单例模式的核心思想是让指定的类只存在唯一一个实例。这意味着当你第二次使用相同的类去创建对象的时候,...
    代码上的蚂蚁阅读 515评论 0 0
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,468评论 0 9