JS_中介者模式
我们从日常的生活中打个简单的比方,我们去房屋中介租房,房屋中介人在租房者和房东出租者之间形成一条中介。租房者并不关心他租谁的房。房东出租者也不关心他租给谁。因为有中介的存在,这场交易才变得如此方便。
在软件开发中,中介者是一个行为设计模式,通过提供一个统一的接口让系统的不同部分进行通信。一般,如果系统有很多子模块需要直接沟通,都要创建一个中央控制点让其各模块通过该中央控制点进行交互。中介这模式可以让这些子模块不需要直接沟通,而达到解耦的目的 。
如下案例,两个obj1之间相互引用,但是各自又相互独立,将其中一个对象删除时,不会影响其他对象。
需要注意的是:
- 事件回调函数写在事件侦听addEventListener中,这个函数不能写return,不能传参,有且只有一个参数,这个参数就是事件对象
- 用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();