热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript观察者模式定义、场景实例代码详解

web前端|js教程javascript,观察者,jsweb前端-js教程观察者模式计算机源码有九位数,vscode错误提示配置,ubuntu拼音,tomcat安装目录,sqlit

web前端|js教程Javascript观察者模式定义、场景实例代码详解
Javascript,观察者,js
web前端-js教程
观察者模式
计算机源码有九位数,vscode错误提示配置,ubuntu拼音,tomcat 安装目录,sqlite 当前日期,常州网页设计公司招聘,网站中数据库教程,自建网站服务器,jquery关系图 插件,前端轻量级搜索框架,猫眼反爬虫,php取整,seo互点,简易springboot,a标签虚线,刷信誉网站制作,网页制作基础教程pdf,红模板 百科,dedecms5.7后台登陆模板,jquery 查询页面模板,公安信息管理系统,拉依达准则 matlab程序lzw
定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新,也被称为是发布订阅模式。
老镇 豆瓣电台 源码,vscode怎么弄css,ubuntu 如何打字,tomcat运营启动流程,nodejs 简单爬虫,php 统计图表,宿州seo关键词优化,网站favicon.ico尺寸,原创织梦蓝色简洁新闻资讯门户模板lzw
它需要一种高级的抽象策略,以便订阅者能够彼此独立地发生改变,而发行方能够接受任何有消费意向的订阅者。
独立团模块破解源码,ubuntu 不能访问卷,爬虫系统的分析,php技,seo文案写法lzw
应用场景:  

这个模式要先说应用场景,比较好理解。

打一个离我们比较近的一个场景,博客园里面有一个订阅的按钮(貌似有bug),比如小A,小B,小C都订阅了我的博客,当我的博客一有更新时,就会统一发布邮件给他们这三个人,就会通知这些订阅者

发布订阅模式的流程如下:

1. 确定谁是发布者(比如我的博客)。

2. 然后给发布者添加一个缓存列表,用于存放回调函数来通知订阅者。

3. 发布消息,发布者需要遍历这个缓存列表,依次触发里面存放的订阅者回调函数。

4. 退订(比如不想再接收到这些订阅的信息了,就可以取消掉)

代码如下:

var pubsub = {}; // 定义发布者(function (q) { var list = [], //回调函数存放的数组,也就是记录有多少人订阅了我们东西 subUid = -1; // 发布消息,遍历订阅者 q.publish = function (type, content) { // type 为文章类型,content为文章内容 // 如果没有人订阅,直接返回 if (!list[type]) { return false; } setTimeout(function () { var subscribers = list[type], len = subscribers ? subscribers.length : 0; while (len--) { // 将内容注入到订阅者那里 subscribers[len].func(type, content); } }, 0); return true; }; //订阅方法,由订阅者来执行 q.subscribe = function (type, func) { // 如果之前没有订阅过 if (!list[type]) { list[type] = []; } // token相当于订阅者的id,这样的话如果退订,我们就可以针对它来知道是谁退订了。 var token = (++subUid).toString(); // 每订阅一个,就把它存入到我们的数组中去 list[type].push({ token: token, func: func }); return token; }; //退订方法 q.unsubscribe = function (token) { for (var m in list) { if (list[m]) { for (var i = 0, j = list[m].length; i

代码可以自己运行一遍,这样比较好理解

优缺点:

优点:当我们需要维护相关对象的一致性的时候,使用观察者模式,,就可以避免对象之间的紧密耦合。例如,一个对象可以通知另外一个对象,而不需要知道这个对象的信息。

缺点:在发布/订阅模式中,如果我们需要将发布者同订阅者上解耦,将会在一些情况下,导致很难确保我们应用中的特定部分按照我们预期的那样正常工作。也就是说它的优点也可能是它的缺点



推荐阅读
author-avatar
幽灵-玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有