中介者模式:通过中介者对象封装一些列对象之间的交互,使对象之间不再相互引用,降低他们之间的耦合。
中介者和观察者对比:同观察者模式一样,中介者模式的主要业务也是通过模块间或者对象见的复杂通信,来解决模块间或对象间的耦合。对于中介者对象的本质是封装多个对象的急哦阿虎,并且这些对象的交互一般都是在中介者内部实现的。虽然两种模式都是通过消息传递实现对象间或者模块间的解耦。观察者模式中的订阅者是双向的,既可以是消息的发布者,也可以是消息的订阅者。而中介者模式中,订阅者是单向的,只能是消息的订阅者。而消息统一由中介者对象发布,所有的订阅者对象间接地被中介者管理。
// 创建中介者
var Mediator = function() {
var _msg = {}
return {
register: function(type, action) {
if (!_msg[type]) _msg[type] = []
_msg[type].push(action)
},
send: function(type) {
if(_msg[type]) {
for (var i = 0; i < _msg[type].length; i++) {
_msg[type][i] && _msg[type][i]()
}
}
}
}
}()
Mediator.register('demo', function () {
console.log('first')
})
Mediator.register('demo', function () {
console.log('second')
})
Mediator.send('demo')