极简实现系列——观察者模式

极简实现系列 是用最简单的代码实现一些常见的方法,目的是为了帮助理解原理,所以并没有考虑太多限制条件


好久没有写过极简系列了,最近经常被问到观察者模式和发布订阅模式的区别,之前有写过 发布订阅模式的极简实现,其实两种模式是非常类似的,今天刚好有空来整理一下自己对这两个模式的理解,然后再简单实现一下。

区别

关于这两个的区别,其实网上有很多大牛有文章去详细总结,所以我也不多说那些细的,就说一个最核心的:

  • 观察者模式是由具体目标调度的,发布订阅是有第三方调度中心

怎么理解呢,这里举一个例子

假设你在网上买鞋子,刚好没货了,这时候如果有个订阅的操作,你就去订阅一下,然后卖家如果有货了,他就在系统上发布一下,这时候所有订阅的人都会收到消息,这个就是发布订阅模式,这里的系统就是第三方的调度中心。

同样的,假如这个网站并没有订阅的操作,你就直接跟卖家说等有货了告诉你,卖家如果有货了就直接打电话给你,这个就是观察者模式,你就是观察者,卖家就是被观察者

是不是挺好理解的,接下来用代码来实现一下

代码实现

核心代码就几行,直接看注释吧

// 被观察者(卖家)
class Subject {
    constructor() {
        this.observer = []
    }
    //收集
    add(ob) {
        this.observer.push(ob)
    }
    //通知
    notify() {
        this.observer.forEach(ob => ob.update())
    }
}
// 观察者(买家)
class Observer {
    constructor(name) {
        this.name = name
    }
    update() {
        console.log(`Hi ${this.name}, 鞋子到货了`)
    }
}
let observer1 = new Observer('Tom')
let observer2 = new Observer('Jerry')// 可能有多个买家
let subject = new Subject()
subject.add(observer1)
subject.add(observer2)
subject.notify()
//打印结果
//Hi Tom, 鞋子到货了
//Hi Jerry, 鞋子到货了

看吧,没骗你吧,确实很简单吧,而且是不是感觉跟发布订阅模式基本一样

总结

好像也没啥号总结的,画个简图看吧

在这里插入图片描述

完事~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值