博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RxJS的学习之路二(观察者模式和迭代器模式)
阅读量:6259 次
发布时间:2019-06-22

本文共 2126 字,大约阅读时间需要 7 分钟。

学习RxJS,其实就是学习一种观察者模式(Observer Pattern)和迭代器模式(Iterator Pattern)结合下的流式编程,那么首先要学的,也是很重要的一点就是理解这两种模式。


观察者模式(Observer Pattern)

观察者模式我们经常可以遇见,最常见的例子就是js中添加事件监听的api就是用了观察者模式

document.body.addEventListener('click', callBack)复制代码

这样的模式就是创建了一个监听器,在所监听事件发生时,执行callBack函数。学习的最好方式就是自己写一遍,所以我们可以用ES6语法写一个观察者模式的对象。

class MyObserable {  constructor(){    this.listeners = [];  }  //加入监听  addListener(func) {    if(typeof func === 'function') {      this.listeners.push(func)    } else {      throw new Error('参数必须为函数')    }  }  // 移除监听  removeListener(func) {    this.listeners.splice(this.listeners.indexOf(func), 1)  }  // 触发监听  notify(message) {    this.listeners.forEach(func => {      func(message)    })  }}复制代码

实例化这个对象就可以创建一个最简单的监听器

var listener = new MyObserable()listener.addListener(mes => console.log('一号监听器获取信息:'+ mes))listener.addListener(mes => console.log('二号监听器获取信息:'+ mes))listener.notify('rua!!')复制代码

可以打印出信息

一号监听器获取信息:rua!!二号监听器获取信息:rua!!复制代码

这个简单的例子我们可以看到,在观察者模式中,事件和监听分离,做到了很好的去耦合。

迭代器模式(Iterator Pattern)

迭代器模式的例子就是ES6语法中自带的迭代器Iterator 在ES6中建立Iterator的方法

var arr = [1, 2, 3];var iterator = arr[Symbol.iterator]();iterator.next();// { value: 1, done: false }iterator.next();// { value: 2, done: false }iterator.next();// { value: 3, done: false }iterator.next();// { value: undefined, done: true }复制代码

ES6的迭代器中只有一个next方法,next返回两种结果:

  1. 在最后一个元素前: { done: false, value: elem }
  2. 在最后一个元素及之后: { done: true, value: undefined }

在了解规则后,我们同样可以写一个简单的迭代器

class IteratorFromArr {  constructor(arr) {    this.array = arr;    this.index = 0;  }  next() {    return  this.index < this.array.length ?             {value: this.array[this.index++], done: false} :            {
done: true} }}复制代码

迭代器的原理不难,它的优势有两个:

  • 它可以渐进地获取数据,实现懒运算或者懒加载
  • 它本身输出一个序列,所以可以使用各种数组的方法
var iterator = new IteratorFromArray([1,2,3]);var newIterator = iterator.map(value => value + 3);newIterator.next();// { value: 4, done: false }newIterator.next();// { value: 5, done: false }newIterator.next();// { value: 6, done: false }复制代码

了解了观察者模式和迭代器模式,RxJS的Observable就是基于这两者实现的,我们可以更好地去理解,而理解了Observable,RxJS的很多问题就很容易学习了。

转载于:https://juejin.im/post/5c85d6ef5188257e814e768e

你可能感兴趣的文章
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
国内外MD5在线解密网站
查看>>
【OC语法要闻速览】一、方法调用
查看>>
Git-命令行-删除本地和远程分支
查看>>
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。...
查看>>
顺序图【6】--☆☆
查看>>
Docker Swarm 让你事半功倍
查看>>
[转]IC行业的牛人
查看>>
javaScript事件(四)event的公共成员(属性和方法)
查看>>
linux系统常用命令
查看>>
在 Word 中的受支持的区域设置标识符的列表
查看>>
Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明2
查看>>
An easy to use android color picker library
查看>>
Oracle SID爆破工具SidGuess
查看>>
批处理常用命令总结2
查看>>
解读ASP.NET 5 & MVC6系列(9):日志框架
查看>>
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
信息检索Reading List
查看>>
JavaWeb_JavaEE_命名规则
查看>>