浅谈JavaScript设计模式——观察者模式(发布订阅模式) 分手后的思念是犯贱 2022-06-18 08:51 294阅读 0赞 观察者模式,又称为发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己的状态。 在观察者模式中,并不是一个对象调用另一个对象的方法,而是一个对象订阅另一个对象的特定活动并在状态改变后获得通知。订阅者也称为观察者,而被观察的对象称为发布者或主题。当发生了一个重要的事件时,发布者将会通知(调用)所有订阅者并且可能经常以事件对象的形式传递消息。 思路: ① 发布者需要一个数组类型的属性subscribers,以存储所有的订阅者; ② 订阅subscribe():将新的订阅者加入到这个数组中去; ③ 退订unsubscribe():从订阅者数组中删除某个订阅者; ④ 发布publish():循环遍历subscribers数组中的每一个元素,并通知他们,即发送消息,意味着调用订阅者的某个方法。因此,当用户订阅信息时,该订阅者需要向subscribe()提供它的其中一个方法。 subscribe()、unsubscribe()、publish()三种方法都需要一个type参数,因为发布者可能触发多个事件,而用户可能仅选择订阅其中一种,而不是另外一种。 使用观察者模式的好处: ① 支持简单的广播通信,自动通知所有已经订阅过的对象。 ② 页面载入后目标对象很容易与观察者存在一种动态关联,增加了灵活性。 ③ 目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。 在[JavaScript][]中,一般使用事件模型来替代传统的观察者模式。 DOM事件,也是JavaScript和DOM之间实现的一种观察者模式。 Eg1: 监听用户单击按钮的动作,但没有办法预知用户将在什么时候点击。因此,订阅按钮上的click事件,当按钮被点击时,便向订阅者发布此消息。 btn.addEventListener("click", function() { console.log("First click"); }, false); // 可以有多个订阅者 btn.addEventListener("click", function() { console.log("Second click"); }, false); btn.click(); Eg2: 非观察者模式: $.ajax({ url: './login', type: 'post', contentType: 'application/json', dataType:'json', success: function(data) { if(data.status === "success") { // 登录成功,渲染header、footer header.setInfo(data.headerInfo); footer.setInfo(data.footerInfo); } } }); 观察者模式: $.ajax({ ..., success: function(data) { if(data.status === "success") { // 登录成功,发布登陆成功消息 login.trigger("loginsuccess", data); } } }); var header = (function() { // 监听消息 login.listen("loginsuccess", function(data){ header.setInfo(data.headerInfo); }); return { setInfo: function(data) { console.log("渲染header"); } }; })(); var footer = (function() { login.listen("loginsuccess", function(data){ footer.setInfo(data.navInfo); }); return { setInfo: function(data) { console.log("渲染nav"); } }; })(); [JavaScript]: http://lib.csdn.net/base/javascript
相关 java设计模式--观察者(发布订阅) *1、概述: ** 观察者模式又称“发布订阅模式”定义一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发送变... 旧城等待,/ 2024年04月17日 20:15/ 0 赞/ 129 阅读
相关 观察者模式 vs 发布订阅模式 目录 场景 观察者模式 发布订阅模式 总结 -------------------- 场景 有一回面试,面试官问: 末蓝、/ 2023年10月06日 19:03/ 0 赞/ 73 阅读
相关 【JavaScript 设计模式】观察者模式与发布订阅模式 JavaScript 设计模式系列文章: [设计模式总览][Link 1] [工厂模式][Link 2] [单例模式][Link 3] [观察者模式/ Bertha 。/ 2022年12月04日 07:58/ 0 赞/ 284 阅读
相关 浅谈JavaScript设计模式——观察者模式(发布订阅模式) 观察者模式,又称为发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己 分手后的思念是犯贱/ 2022年06月18日 08:51/ 0 赞/ 295 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 268 阅读
相关 设计模式之观察者模式(发布订阅模式) 说明:本文参照《大话设计模式》中的案例做简要解析 观察者模式: 又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 深藏阁楼爱情的钟/ 2022年05月21日 10:39/ 0 赞/ 323 阅读
相关 javascript 观察者模式 发布订阅模式 观察者模式 观察者模式,每一个观察者对象有两个方法 添加监听`subscribe` 发布事件`publish` 观察者有个`list`存放所有的已经添加监 本是古典 何须时尚/ 2022年04月24日 10:14/ 0 赞/ 267 阅读
相关 设计模式篇一:观察者模式与发布-订阅模式 观察者模式(Observer) 观察者模式:一个对象(主体)根据它维护的一个对象列表(观察者),自动通知它们状态的任何变化。(举例说明,电商平台关注(订阅)一家店铺(发布 矫情吗;*/ 2022年02月21日 10:07/ 0 赞/ 271 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 354 阅读
还没有评论,来说两句吧...