理解观察者模式

简单的讲,一个对象作为特定任务或是另一对象的活动的观察者,并且在这个任务或活动发生时,利用事件的形式通知观察者。

观察者的使用场合

当一个对象的改变需要同时改变其它对象,并且它不知道具体有多少对象需要改变的时候,就应该考虑使用观察者模式。

例如,用户A,B,C分别订阅某服务,当服务有更新是可设定更新、下载等操作。

模拟实现

定义Observable对象,其内部包含了2个方法:add(订阅)与fire(发布)方法

// 观察者
var Observable = {callbacks: [],add: function(fn) {this.callbacks.push(fn);},fire: function() {this.callbacks.forEach(function(fn) {fn();})}
}

订阅

1 Observable.add(function() {
2     console.log(1);
3 })
4 Observable.add(function() {
5     console.log(2);
6 })

发布

Observable.fire();     // 1, 2

实际应用

实际业务中,如请求某个ajax后需要执行多个方法,数据处理、渲染页面、其他业务等,可以使用观察者

 1 Observable.add(function() {
 2   //pocessData
 3 })
 4
 5 Observable.add(function() {
 6   $('test').html(data.a)
 7   $('test2').html(data.b)
 8   $('test3').html(data.c)
 9 })
10
11 Observable.add(function() {
12   //pocessOther
13 })
14
15 $.ajax({
16   url: "test.html",
17   context: document.body
18 }).done(function(data) {
19   Observable.fire(data)
20 })

转载于:https://www.cnblogs.com/huair_12/p/4175549.html

(四)JS学习笔记 - 模式 - 观察者模式相关推荐

  1. Vue.js 学习笔记 四 用一,二,三的知识做个跑马灯

    做个简单的跑马灯效果 页面定义2个按钮,绑定2个方法. <div id="divApp"><input type="button" value ...

  2. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

  3. 基于jquery的插件turn.js学习笔记

    基于jquery的插件turn.js学习笔记 简介 turn.js是一个可以实现3d书籍展示效果的jq插件,使用html5和css3来执行效果.可以很好的适应于ios和安卓等触摸设备. How it ...

  4. Node.js学习笔记8

    Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...

  5. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  6. Vue.js 学习笔记 八 v-for

    v-for指令,是用来循环的,常用的情况有以下4种 <div id="divApp"><!--迭代数字--><p v-for="n in 5 ...

  7. Vue.js 学习笔记 五 常用的事件修饰符

    介绍几个常用的事件修饰符 直接上代码 <div id="divApp"><div class="divColor" v-on:click=&q ...

  8. Vue.js 学习笔记三,一些基础指令,v-bind,v-on

    在笔记二的基础上继续写 v-bind指令,为属性绑定数据 <!--v-bind指令可以绑定属性--><div v-html="msg2" v-bind:title ...

  9. JS学习笔记六:js中的DOM操作

    1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...

最新文章

  1. 模仿nginx修改进程名
  2. ACM题集以及各种总结大全(转)
  3. linux下rpm包和命令使用简介
  4. 在Android Studio中搜索整个项目中所有出现的字符串
  5. Qt 数据库操作(二)
  6. php k线图 echarts,利用ECharts.js画K线图的方法示例
  7. Web产品的交互说明文档应该怎么写?
  8. python scrapy框架爬虫_Python Scrapy爬虫框架
  9. [转]MVP+WCF+三层结构搭建项目框架
  10. java栈和队列实现删除,数据结构学习--Java栈和队列
  11. arcgis重分类工具详解——结合遥感影像中植被剔除实例
  12. 路在脚下,却不知怎么去走?
  13. 小程序生成二维码海报
  14. 『XXG JS』JavaScript 数组 - 查找
  15. 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计
  16. AS3中对声音的控制
  17. 微软在好莱坞输给了Linux
  18. 联想电脑尺寸在哪里看_怎么看笔记本屏幕大小 笔记本屏幕型号尺寸查看方法介绍...
  19. 西南民族大学计算机科学与工程学院官网,四川西南民族大学计算机科学与技术学院 软件工程转专业...
  20. ToList()方法

热门文章

  1. 针对应用开发者的几点建议
  2. 写在《30天自制操作系统》上市之前
  3. occam‘s razor
  4. 《刺杀小说家》读后感
  5. ubuntu配置文件对照表
  6. sudo apt install ...
  7. Java中如何读写cookie (二)
  8. Centos 7网络属性配置及命令
  9. 关于tolua的使用
  10. 一起谈.NET技术,数据库访问的性能问题与瓶颈问题