美文网首页
前端设计模式-观察者模式(上)

前端设计模式-观察者模式(上)

作者: FConfidence | 来源:发表于2020-03-07 23:20 被阅读0次

观察者模式

  1. 发布&订阅

  2. 一对多

  3. 优点:更加解耦,支持广播通信

  4. 缺点:大量观察者,广播有性能问题

    // 主题对象
    class Subject {
      constructor() {
        this.state = {};
        this.observers = [];
      }
    
      getState() {
        return this.state;
      }
    
      setState(state) {
        this.state = state;
        this.notifyAllObservers();
      }
    
      notifyAllObservers() {
        this.observers.forEach(observer => {
          observer.update();
        });
      }
    
      attach(observer) {
        this.observers.push(observer);
      }
    
    }
    
    // 观察者
    class Observer {
      constructor(name, subject) {
        this.name = name;
        this.subject = subject;
        this.subject.attach(this);
      }
    
      update() {
        console.log(`${this.name} update, state: ${this.subject.getState()}`);
      }
    }
    
    // 测试
    
    let sub = new Subject();
    
    let ob1 = new Observer('Confidence', sub);
    let ob2 = new Observer('Java', sub);
    let ob3 = new Observer('NodeJs', sub);
    
    sub.setState(1);
    
  5. 场景

    • 网页事件绑定
      $('#btn').click(function() {
        console.log(1);
      });
      $('#btn').click(function() {
        console.log(2);
      });
      
    • Promise
      function loadImg() {
        const promise = new Promise((resolve, reject) => {
          var img = document.createElement('img');
          img.onload = function() {
            resolve(img);
          }
          img.onerror = function() {
            reject('图片加载失败);
          }
          img.src = 'https://....xxx.png';
        });
        return promise;
      }
      
      
      loadImg().then(res => {
        return res;
      }).then(res => {
        console.log(res);
      })
      
    • jQuery callbacks
      var callbacks = $.Callbacks();
      callbacks.add(function(info) {
        console.log('fn1', info);
      });
      callbacks.add(function(info) {
        console.log('fn2', info);
      });
      
      callbacks.fire('arg1');
      callbacks.fire('arg2');
      
    • nodejs自定义事件

相关文章

  • Typescript 观察者模式(Observer)

    标签: 前端 设计模式 观察者模式 typescript observer 请仔细阅读下面代码,理解其中的设计理念...

  • 1-观察者模式与发布订阅“模式”

    一、观察者模式 观察者模式在前端工程中是很常见的设计模式,因为前端交互中充斥着大量多控件联动的交互,当参与联动的组...

  • 前端常用设计模式

    前端常见的设计模式主要有以下几种: 单例模式 工厂模式 策略模式 代理模式 观察者模式 模块模式 构造函数模式 混...

  • 观察者设计模式

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

  • 前端设计模式-观察者模式(上)

    观察者模式 发布&订阅 一对多 优点:更加解耦,支持广播通信 缺点:大量观察者,广播有性能问题// 主题对象cla...

  • web前端之面试提纲

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

  • 设计模式-观察者模式 发布/订阅模式

    设计模式-观察者模式 发布/订阅模式 代码 观察者接口 具体的被观察者 观察者 最后定义中间 场景类 修改 由于上...

  • RxJava基础—观察者模式

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

  • Javascript设计模式之观察者模式

    观察者模式 观察者模式(Observe)是前端开发中常用的一种设计模式,在各大框架中都有使用。 当对象间存在一对多...

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

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

网友评论

      本文标题:前端设计模式-观察者模式(上)

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