编程模式-观察者模式

观察者模式涉及3个对象,发布者、观察者、主题对象。它们是一(发布者)(主体对象)对多(观察者)的关系。

它的作用是,不需要总是事实访问数据,而是将主题数据提交给一个数据管理中心(发布者),然后将订阅者统一管理。当我在任何时候需要需要通知订阅者时,可以统一地、一次性地将数据发送给所有订阅者。

它解决的实际问题,就是将业务重心转移,不需要繁琐地、实时地访问数据,而只需要关心数据产生变化(通常是这样)时负责的业务。

//  观察者模式构造器
class Publisher {
    //  订阅者的 map
    dep = new Map();
    //  数据主体,被观察的数据
    data = null;

    constructor(data){
        this.data = data;
    }

    //  订阅
    subscribe(fn){
        this.dep.set(fn, fn);
    }

    //  取消订阅
    unsubscribe(fn){
        this.dep.delete(fn);
    }

    //  发布————实际上,当有任何数据变化的时候,才应该执行发布
    publish(){
        this.dep.forEach(fn => {
            fn(this.data);
        });
    }
}

//  发布者,观察的数据是123
const publisher = new Publisher(123);

//  订阅者1
const watcherFn1 = function (observerData){
    //  watcherFn1,被观察的对象
    console.log(arguments.callee.name, observerData);
};
//  订阅者2
const watcherFn2 = function (observerData){
    //  watcherFn2,被观察的对象
    console.log(arguments.callee.name, observerData);
};
//  2个订阅者订阅了publisher
publisher.subscribe(watcherFn1);
publisher.subscribe(watcherFn2);
//  将会触发2个订阅者的回调函数
publisher.publish();
publisher.publish();
//  fn2取消订阅
publisher.unsubscribe(watcherFn2);
//  只剩下fn1订阅有效
publisher.publish();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值