已解决
前端设计模式之【观察者模式】
来自网友在路上 11018101提问 提问时间:2023-11-11 13:30:00阅读次数: 101
最佳答案 问答题库1018位专家为你答疑解惑
文章目录
- 前言
- 介绍
- 实现
- 优缺点
- 应用场景
- 后言
前言
hello world欢迎来到前端的新世界
😜当前文章系列专栏:前端设计模式
🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力
介绍
观察者模式又称发布-订阅模式(Publish/Subscribe Pattern),是我们经常接触到的设计模式,日常生活中的应用也比比皆是,比如你订阅了某个博主的频道,当有内容更新时会收到推送;又比如JavaScript中的事件订阅响应机制。观察者模式的思想用一句话描述就是:被观察对象(subject)维护一组观察者(observer),当被观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者。
实现
观察者模式中Subject对象一般需要实现以下API:
- subscribe(): 接收一个观察者observer对象,使其订阅自己
- unsubscribe(): 接收一个观察者observer对象,使其取消订阅自己
- fire(): 触发事件,通知到所有观察者
// 被观察者
function Subject() {this.observers = [];
}Subject.prototype = {// 订阅subscribe: function (observer) {this.observers.push(observer);},// 取消订阅`在这里插入代码片`unsubscribe: function (observerToRemove) {this.observers = this.observers.filter(observer => {return observer !== observerToRemove;})},// 事件触发fire: function () {this.observers.forEach(observer => {observer.call();});}
}
验证是否订阅成功
const subject = new Subject();function observer1() {console.log('Observer 1 Firing!');
}function observer2() {console.log('Observer 2 Firing!');
}subject.subscribe(observer1);
subject.subscribe(observer2);
subject.fire();//输出:
Observer 1 Firing!
Observer 2 Firing!
验证一下取消订阅是否成功:
subject.unsubscribe(observer2);
subject.fire();//输出:
Observer 1 Firing!
优缺点
优点
- 支持简单的广播通信,自动通知所有已经订阅过的对象
- 目标对象与观察者之间的抽象耦合关系能单独扩展以及重用
- 增加了灵活性
- 观察者模式所做的工作就是在解耦,让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。
缺点
过度使用会导致对象与对象之间的联系弱化,会导致程序难以跟踪维护和理解
应用场景
- DOM事件
document.body.addEventListener('click', function() {console.log('hello world!');
});
document.body.click()
后言
创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力
查看全文
99%的人还看了
相似问题
- 前端设计模式之【观察者模式】
- 安卓常见设计模式12------观察者模式(Kotlin版、Livedata、Flow)
- 什么是观察者模式?用 Python 如何实现 Observer(观察者或发布订阅)对象行为型模式?
- javascript自定义事件的观察者模式写法和用法以及继承
- c++实现观察者模式
- 设计模式——观察者模式(Observer Pattern)+ Spring相关源码
- 性能优化之懒加载 - 基于观察者模式和单例模式的实现
- 【28】c++设计模式——>观察者模式(1)
- GPT带我学-设计模式-10观察者模式
- 设计模式:观察者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
猜你感兴趣
版权申明
本文"前端设计模式之【观察者模式】":http://eshow365.cn/6-37627-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 火山引擎公共云·城市分享会:共享云经验,一起向未来
- 下一篇: vue如何解决跨域?原理?