JS设计模式之观测者模式

如果, 你只能学习一种设计模式,那么这种模式就只能是观察者模式。
观察者模式的应用范围很广, 可能你在无意中就遇到过, 其中最流行的Jquery就是运用的这种模式, 另外, 双十一那天, 剁手前点击的购物车也是运用了这种模式。 其它比如给DOM元素绑定事件, ES6异步, 都是采用的这种模式, 那么, 问题来了, 这到底是怎么实现的呢? 其它先不谈,一个简单的例子, 备好瓜子版本,且听我娓娓道来。我们首先创建一个subject对象作为被观察者:

  class Subject {
    constructor() {
        this.state = 0;
        this.observes = [];
    }

    getState() {
        return this.state;
    }

    setState(state) {
        this.state = state;
        this.notifyAllObservers();
    }


    notifyAllObservers() {
        this.observes.forEach(observer => {
            observer.update()
        });
    }

    attach(observer) {
        this.observes.push(observer);
    }
}

其次我们创建一个观察者:

 class Observer {
    constructor(name, subject) {
        this.name = name;
        this.subject = subject;
        this.subject.attach(this)
    }

    update() {
        console.log(`${this.name} update`)
    }
}

最后调用:


let s = new Subject();
let o1 = new Observer('01', s);

被观察者会把所有的观察者收集起来, 当有一个观测者修改了被观察者的状态, 那么所有的观察者都会接收到响应。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,772评论 0 14
  • 下面总结设计模式中的行为型模式: 1.责任链模式 顾名思义,责任链模式(Chain of Responsibili...
    Steven1997阅读 3,489评论 0 1
  • 设计模式分类 总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原...
    lifeline丿毅阅读 1,245评论 0 2
  • (一)曾外祖母 昏黃的光填满小屋 老人躺在木床酣睡 轻微的鼾声冲散夜的诡色 一支笔得以写到卷终 (二)外祖父 夜染...
    凌迦阅读 386评论 0 0
  • (6/100) 30岁男性 金融业 活动能力强,但是办事效率有点低,自尊心强,但容易缺乏耐性,左右摇摆不定,依赖感...
    于小小小小小瑞阅读 98评论 0 0