【D1n910】第 23 章 中介者模式 《JavaScript 设计模式》
正常操作,正常分析,大家好,我是D1n910。
今天我继续来学习 《JavaScript 设计模式》的第四篇 行为型设计模式
这是一个连续的读书笔记,所以如果你之前的内容没有看的话,可以去看看(建议直接看书,当然书的例子都比较早了,是2015年之前的代码内容,过了六年了,前端发展了很多,比如类的声明可以直接用 Class 了)。
直接查看目录就可以查看到所有的系列文章啦。

这里再次感谢 《Javascript 设计模式》及其作者 张荣铭,专栏内容是在它的基础上生成的。
现在会觉得很多设计模式离我们有点遥远,是因为我们现在都在用大佬写好的框架吧,很多设计模式都包含在框架里了。
后面有机会的话,我希望我可以查看目前主流框架的源代码,然后进行讲解。
对应的代码,请查看
https://github.com/D1N910/JavaScript-design-patterns.git

第四篇 行为型设计模式
行为型设计模式用于不同对象之间职责划分或算法抽象,行为型设计模式不仅仅涉及类和对象,还涉及类或对象之间的交流模式并加以实现。
第 23 章 中介者模式(P152)
中介者模式(Mediator):通过中介者对象封装一系列对象之间交互,使对象之间不再相互引用,降低他们之间的耦合。有时中介者对象也可以改变对象之间的交互。
从书上的内容来看,一开始我是没能理解中介者模式和观察者模式的区别的。
后来经过资料查询,询问公司大佬,明白了以下区分的点:
(1)观察者模式主要内容是观察者和被观察者,主要是靠事件驱动,发布时一般会传递参数;
(2)中介者模式主要是解决多个对象之间交互的问题,他会存储各个对象的事务,发布时一般不会传递参数。
中介者的写法看起来和观察者很像,但是其实内部是有转化内容的,是可以自行处理参数的。
它的订阅内容一般不是动态灵活的,所以一般不会提供解除订阅的方式(这样就是更复杂的观察者模式了)。
它一般会集中设定好订阅内容。
比如我们有这个人场景,老板主动通知大家去工作,它只需要让中间人发出通知“工作”即可。
var Intermediary = (function () {
var thing = {}
return {
resiger: function (type, action) {
if (thing[type]) {
thing[type] = action
} else {
thing[type] = [action]
}
},
send: function (type) {
if (!thing[type]) {
return
}
for (var fn of thing[type]) {
fn()
}
}
}
})()
var staff = (function () {
return {
work() {
console.log('员工工作了')
}
}
})()
var manager = (function () {
return {
work() {
console.log('经理工作了')
}
}
})()
// 集中处理工作
{
Intermediary.resiger('work', function () {
staff.work()
manager.work()
})
}
Intermediary.send('work')
这样完成了咱们的中介者模式。
其实感觉这个内容,还是和观察者模式很像。
本章 End
d1n910 于 2021年03月03日 写于南山后海