美文网首页
js观察者模式如何实现

js观察者模式如何实现

作者: Zzzack | 来源:发表于2019-07-30 19:03 被阅读0次

观察者模式

观察者模式有几个要素:

需要将需要观察的对象存放起来

在需要的地方触发该观察者

第三观察者需要分类,同一类的观察者可监听同一个事件,监听被触发时,所有的观察者都需要被通知到。

具体实现一个观察者模式如下:

;(function(w) {varListen=function() {this.pool=newMap();}//注册观察者Listen.prototype.on=function(type,cb) {if(this.pool.get(type)) {this.pool.get(type).push(cb)}else{this.pool.set(type, [cb])}}//触发观察者Listen.prototype.emit=function(type,...args) {if(this.pool.get(type)) {this.pool.get(type).forEach(listener=>{listener.apply(type, args)})}else{console.log('undefined type:', type)}}//删除观察者Listen.prototype.remove=function(type) {if(this.pool.get(type)) {this.pool.delete(type)}else{console.log('undefined type:', type)}returnthis;}w.Listen=Listen;})(window)

上面代码里使用了es6 的Map对象来存储观察者。注册观察者的时候,每收到一个观察者注册,就按类型将他们分类存放,同一类的观察者存储在一个数组中。触发观察者的代码中,收到触发的命令后,找出触发的类型,调用所有已注册的同类的观察者。删除观察者,就将注册的所有观察者删除,return this方便链式调用

调用示例如下:

varlistener=newListen()listener.on('click', ()=>{console.log('clicked 1 ...')})listener.on('click', ()=>{console.log('clicked 2 ...')})listener.on('hover', ()=>{console.log('hover 1 ...')})listener.emit('click')listener.emit('hover')listener.remove('click').on('click', ()=>{console.log('click again ...')})listener.emit('click')//clicked 1 ...//clicked 2 ...//hover 1 ...//click again ...

至此,就实现了一个简单的观察者模式

相关文章

  • js代码题

    js对象的深度克隆 js数组去重 js常用设计模式的实现思路,单例,工厂,代理,装饰,观察者模式等

  • js观察者模式如何实现

    观察者模式 观察者模式有几个要素: 需要将需要观察的对象存放起来 在需要的地方触发该观察者 第三观察者需要分类,同...

  • 2021-11-18 - 学习记录

    观察者模式 - js

  • RxJava 2.x 源码分析(一)

    主要介绍 Rxjava 是如何利用观察者模式实现通信 依赖 核心类和接口 Observable (被观察者) 被...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • 观察者模式js实现

    参看书籍JavaScript模式第七章设计模式我的理解:观察者模式又叫订阅/发布模式。被观察者(发布者)内部需要有...

  • 【设计模式】观察者模式 和 发布订阅模式

    目录:观察者模式发布-订阅模式观察者模式和发布订阅模式的区别实现vue数据双向绑定 (1)观察者模式 (1)概念 ...

  • 观察者模式_20190912(python)

    一、观察者模式介绍 二、观察者模式UML 三、python实现观察者模式(demo1、2) 1、demo1 """...

  • 学习 Vue 中观察者模式

    贴一个 Vue 中源码的观察者模式源码 手动实现观察者模式 观察者模式和订阅发布模式的区别 观察者模式是由具体的目...

  • RN的传值相关

    观察者模式 通过EventEmitter实现事件机制,实现简单的观察者模式。发送端、接受端同时需要引入Device...

网友评论

      本文标题:js观察者模式如何实现

      本文链接:https://www.haomeiwen.com/subject/jilorctx.html