一个简单的发布订阅模式

16 阅读1分钟

先举个栗子🌰

一天小明去商场买衣服,好不容易挑了一件衣服,店员说,这件衣服太火,断货了...不过过几天就会补货,你把电话写下来,补货后,我打电话通知你就行了。在这个例子中,有个几个概念:顾客小明-订阅者、店员-发布者、店员记录电话的本子-订阅者列表,因为不可能就一个人留下了电话。之后,等衣服到货后,发布者就会一次打电话通知订阅者。

日常开发中已经使用到的发布订阅模式

  • addEventListener
window.addEventListener('load', function () {
	console.log('loaded!')
})

页面元素加在完成后,执行回调,所以发布订阅模式里面,就是通过执行一个函数去通知订阅者.

伪代码

    class Publish {
        constructor() {
          this.subscription = [];
        }
        setSubscription(subscription) {
          this.subscription.push(subscription);
        }

        notify() {
          for (const sub of this.subscription) {
            sub.update();
          }
        }
      }

      const publisher = new Publish();
      const customer = {
        phone: '156xxx',
        update() {
          console.log(this.phone + ': 你的衣服到货了');
        },
      };
      publisher.setSubscription(customer);
      publisher.notify(customer);

完!