观察者设计模式

/* 观察者模式
      + 观察者模式通常又被称为发布订阅者模式(Publisher/Subscribers): 它定义了对象和对象间的一种
        依赖关系, 只要当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新, 解决了
        主体对象与观察者之间功能的耦合.
      + 生活中观察者模式也是非常常见的, 比如订阅公众号, 订阅报纸, 订阅各种媒体等; 当被订阅的主体的状态
        发生改变, 比如有新的消息, 就通知订阅者.
      + 观察者的使用场合就是: 当一个对象的改变需要同时改变其他对象, 并且它不知道具体有多少对象改变的时候,
        就应该考虑使用观察者模式.
      + 各种原生事件, 自定义事件. vue源码
    */
    //  以下是观察者模式在js中的简单实现
    // 发布
    class Publisher {
      constructor() {
        this._state = 0
        this.substribers = []
      }
      get state() {
        return this._state
      }
      set state(value) {
        this._state = value
        this.notify(value)
      }
      notify(value) {
        this.substribers.forEach(substriber => {
          substriber.update(value)
        })
      }
      collect(substriber) {
        this.substribers.push(substriber)
      }
    }
    // 订阅
    let subId = 1
    class Substriber {
      publisher = null
      id = subId++
      substribe(publisher) {
        this.publisher = publisher
        publisher.collect(this)
      }
      update(value) {
        console.log(`我是${this.id}号订阅者, 收到发布者信息: ${value}`)
      }
    }

    let publisher = new Publisher()
    let substriber1 = new Substriber()
    let substriber2 = new Substriber()
    substriber1.substribe(publisher)
    substriber2.substribe(publisher)
    publisher.state = 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值