From bece99e08f7492e570cd2f837bd57a9c9773b922 Mon Sep 17 00:00:00 2001 From: Zeshi Zheng Date: Tue, 26 Mar 2019 18:55:43 -0400 Subject: [PATCH] implement simple observer pattern/publisher-subscriber pattern --- Observable.js | 13 ++++++++----- PubSub.js | 10 ++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Observable.js b/Observable.js index 03545cd..0636125 100644 --- a/Observable.js +++ b/Observable.js @@ -10,13 +10,14 @@ class ObserverList { this.observerList = []; } add(observer) { - // todo add observer to list + this.observerList.push(observer); } remove(observer) { - // todo remove observer from list + this.observerList = this.observerList.filter(item => item !== observer); } count() { // return observer list size + return this.observerList.length; } } @@ -25,13 +26,15 @@ class Subject { this.observers = new ObserverList(); } addObserver(observer) { - // todo add observer + this.observers.add(observer); } removeObserver(observer) { - // todo remove observer + this.observers.remove(observer); } notify(...args) { - // todo notify + this.observers.observerList.forEach(item => { + item.update(...args); + }) } } diff --git a/PubSub.js b/PubSub.js index 0c7999e..3dcdc08 100644 --- a/PubSub.js +++ b/PubSub.js @@ -12,15 +12,17 @@ module.exports = class PubSub { } subscribe(type, fn) { - // todo subscribe + this.subscribers[type] = fn; } unsubscribe(type, fn) { - // todo unsubscribe + this.subscribers[type] = null; } publish(type, ...args) { - // todo publish + if (this.subscribers[type]) { + this.subscribers[type].call(this, ...args); + } } -} +};