zoukankan      html  css  js  c++  java
  • 发布订阅者模式、观察者模式总结

    /**
    * 观察者模式定义:Subject维持一系列它的对象Observer,当有关状态发生变更时Subject对象则会通知一系列Observer对象进行更新。
    * 在Subject对象添加了一系列Observer对象之后,Subject维持一系列Observer对象,当有关状态发生变更时Subject对象则会通知这
    * 一系列Observer对象进行更新
    * splice讲解(当前的索引,截取的个数,增加的数字)
    * @param 1个参数
    * @patam 2个参数
    * @param 3个参数
    */
    function Subject() {
    this.observers = [];
    }
    Subject.prototype = {
    add: function (observer) {
    this.observers.push(observer);
    },
    remove: function (observer) {
    var observers = this.prototype;
    for (var i = 0; i < observers.length; i++) {
    if (observers[i] === observer) {
    this.observers.splice(i, 1)
    }
    }
    },
    notify: function () {
    var observers = this.observers;
    for (var i = 0; i < observers.length; i++) {
    observers[i].notify();
    }
    }
    }

    var sub = new Subject();
    var obs1 = new Observer('t1');
    var obs2 = new Observer('t2');
    Observer.prototype = {
    update: function () {
    console.log('my name is' + this.name);
    }
    }
    sub.add(obs1);
    sub.add(obs2);
    sub.notify();
    /**
    * 发布订阅模式指的是希望接收通知的对象(Subscriber)基于一个主题通过自定义事件订阅主题,被激活事件的对象(Publisher)通过发布主题事件的方式通知各个订阅该主题的 Subscriber 对象。
    *
    */
    let pubSub = {
    list: {},
    // 订阅
    subscribe: function (key, fn) {
    if (!this.list[key]) {
    this.list[key] = [];
    };
    this.list[key].push(fn);
    },
    // 发布
    publish: function () {
    let arg = arguments;
    let key = [].shift.call(arg);
    let fns = this.list(key);
    if (!fns || fns.length <= 0) return;
    for (var i = 0; i < fns.length; i++) {
    fns[i].apply(this, arg);
    }
    },
    // 取消订阅
    unSubscribe: function (key) {
    delete this.list[key];
    }
    }
    pubSub.subscribe('name', (name) => {
    console.log('your name is' + name);
    })
  • 相关阅读:
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
    Spring Security基本用法
    java中跳出循环的方式
    cookie和session区别
    spring中类型注解下的bean的加载顺序
    常见的异常
    aop使用场景
    缓存类似于redis
    旧版redis使用
    获取rdis的几种方式
  • 原文地址:https://www.cnblogs.com/yayaxuping/p/9911024.html
Copyright © 2011-2022 走看看