观察者模式 也称 发布-订阅模式 、 模型-视图模式 。当对象间存在一对多
关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
一、前言
观察者模式: 类似我们在微信平台订阅了公众号 , 当它有新的文章发表后,就会推送给我们所有订阅的人。
我们作为订阅者不必每次都去查看这个公众号有没有新文章发布,公众号作为发布者会在合适时间通知我们。
我们与公众号之间不再强耦合在一起。公众号不关心谁订阅了它, 不管你是男是女还是宠物狗,它只需要定时向所有订阅者发布消息即可。
二、观察者模式优缺点
优点:
- 可以广泛应用于异步编程,它可以代替我们传统的回调函数。
- 我们不需要关注对象在异步执行阶段的内部状态,我们只关心事件完成的时间点。
- 取代对象之间硬编码通知机制,一个对象不必显式调用另一个对象的接口,而是松耦合的联系在一起。
- 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。
缺点:
- 如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
- 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。
- 观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
三、代码实现
- Event简易版
1 | var Event = (function() { |
- 类似Nodejs的EventEmitter模拟版
1 | function EventEmitter() { |
四、DOM自定义事件API
Event
构造器
1 | // 创建 |
CustomEvent
构造器,可传递参数。
1 | // 创建 |
欢迎访问:天问博客
本文作者: Tiven
发布时间: 2022-02-25
最后更新: 2023-03-02
本文标题: JS中自定义事件与观察者模式
本文链接: https://www.tiven.cn/p/a5c42cd9/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
发布时间: 2022-02-25
最后更新: 2023-03-02
本文标题: JS中自定义事件与观察者模式
本文链接: https://www.tiven.cn/p/a5c42cd9/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!