观察者模式与发布订阅

129 阅读1分钟

发布订阅

什么是发布订阅

发布订阅模式事一种常见的设计模式,由三部分组成:发布者(Publisher)、调度中心(Event Channel)、订阅者(Subscriber)。
订阅者讲想要订阅的时间注册到调度中心,当发布者发布该事件到调度中心,也就是改事件触发是,有调度中心统一调度订阅者注册到调度中心的处理代码。

手写发布订阅

const eventHub = {
    events: {},
    
    // 因为函数里面需要用到this,所以不要使用箭头函数
    on(name, fn) {
        this.events[name] = this.events[name] || [];
        this.events[name].push(fn);
    },
    emit(name, data) {
        const fns = this.event[name];
        if(!fns) return;
        fns.forEach(fn => {
            fn.call(undefined, data);
        });
    },
    off(name, fn) {
        const fns = this.events[name];
        const index = fns.indexOf(fn);
        if(index > -1) {
            this.events.splice(index, 1);
        }
    }
}

观察者模式

一个对象(称为subject)维持一系列以来与他的对象(称为observer),将有关状态的任何变更自动t通知给他们(观察者)

区别

设计模式观察者模式发布订阅者模式
主体Object观察者、Subject目标对象Publisher发布者、EventChannel事件中心、Subscribe订阅者
主体关系Subject中通过ObserverList记录ObserverPublisher和Subscribe互相不知道对方,荣国中介联系
优点角色明确,Subject和Object要遵循约定的成员方法松散耦合、灵活度高、通常应用在异步编程中
缺点紧耦合当事件类型变多时,会增加维护成本
使用案例双向数据绑定事件总线EventBus