美文网首页
2018-01-15 js观察者模式设计

2018-01-15 js观察者模式设计

作者: jinya2437 | 来源:发表于2018-01-15 16:21 被阅读120次
观察者模式

当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知,也简称发布-订阅模式。类似微信订阅公众号,当它有新的文章发表后,就会推送给我们所有订阅的人

优点
1.我们无需关注公众号是否有新的文章发布
2.我们和公众号没有强耦合在一起,公众号不关心谁订阅了它

自定义事件

现在我们想要实现这样的功能,定义一个事件,它有以下功能

  • 监听事件(订阅公众号)
  • 触发事件(公众号发布)
  • 移除事件(取消关注公众号)
//代码如下
var Event = (function(){
  var list = {},//存储公众号
      on,
      emit,
      remove;
  //监听事件
  on = function(key,fn){
    if(!list[key]){
      list[key] = [];如果不存在key,创建
    }
    list[key].push(fn);//将回调函数存储到对应的key
  };
  //触发事件
  emit = function(){
    var key = Array.prototype.shift.call(arguments);//获取key值
    var msg = list[key];
    if(!msg || msg.length === 0){
      return false;//不存在对应的回调函数,返回false
    }
    for(var i = 0; i < msg.length; i++){
      msg[i].apply(this,arguments);//循环执行回调函数
    }
  };
  //移除事件
  remove = function(key,fn){
    var msg = list[key];
    if(!msg){
      return false;//如果不存在事件 返回false
    }
    if(!fn){
     delete list[key];//没有指定的回调函数,则删除key 可以理解公众号下架了
    }else{
      for(var i = 0; i < msg.length; i ++){
        if(msg[i] === fn){
          msg.splice(i, 1);//删除指定的回调函数
        }
      }
    }
  };
  // 返回对象
  return {
    on:on,
    emit:emit,
    remove:remove
  }
})();

var fn = function(data){
  console.log(data+"推送消息来啦~~~")
}
Event.on('click',fn);//订阅公众号
Event.emit('click',"2018.01.15")//发布公众号
Event.remove('click',fn);//取消关注公众号

相关文章

  • js的4种设计模式及Vue小结(1)

    4种js设计模式 模块模式(module) 原型模式(prototype) 观察者模式(observer) 单例模...

  • js代码题

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

  • 2018-01-15 js观察者模式设计

    观察者模式 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知,也简称发布-订阅模式。类似微信订阅公众号,...

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • 2021-11-18 - 学习记录

    观察者模式 - js

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式02-观察者者设计模式

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • web前端之面试提纲

    前端基础 JS 原型链机制的理解 设计模式:了解基本的前端设计模式,单例、适配器、工厂、观察者。 跨域的方式、同源...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

网友评论

      本文标题:2018-01-15 js观察者模式设计

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