JS手写-观察者模式

185 阅读1分钟

观察者监听被观察者的变化,被观察者发生改变时,通知所有的观察者

订阅微信公众号、接收文章推送的过程,也是一个典型的应用观察者模式的例子

    //观察者模式
    //被观察者:属性(被观察者,观察者列表),方法(加人,删人,发布)
    //观察者:属性(观察者),方法(更新)
    class Observed{
        constructor(topic){
            this.topic = topic;
            this.list = new Set();
        }
        addObserve(ob){
            this.list.add(ob);
        }
        delObserve(ob){
            this.list.delete(ob);
        }
        publish(article){
            for (const ob of this.list) {
                ob.update(this.topic,article)
            } 
        }
    }

    class Observe{
        constructor(name){
            this.name = name
        }
        update(topic,article){
            console.log(`${this.name} 接收到了 ${topic} 推送的 ${article}`);
        }
    }

    //测试
    let WeChat = new Observed('美团外卖');
    let zs = new Observe('张三');
    let ls = new Observe('李四');

    WeChat.addObserve(zs);
    WeChat.addObserve(ls);
    WeChat.publish('每月18日领取大额优惠卷')
    //张三 接收到了 美团外卖 推送的 每月18日领取大额优惠卷
    //李四 接收到了 美团外卖 推送的 每月18日领取大额优惠卷

    WeChat.addObserve(zs);
    WeChat.delObserve(ls);
    WeChat.publish('超大15元包来袭')
    //张三 接收到了 美团外卖 推送的 超大15元包来袭