观察者模式与订阅发布模式的区别

kingcwt2018-05-15前端javascript
  • 观察者模式

观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯

let subject={
  observers:[],
  add:observer=>subject.observers.push(observer),
  notify:(...args)=>{
    subject.observers.forEach(observer=>{
      observer.update(...args)
    })
  },
  observer:{
    update:(...args)=>{
      console.log(...args);
    }
  }
}

subject.add(subject.observer);
subject.notify('吃饭');

  • 发布订阅模式

现在的发布订阅模式中,称为发布者的消息发送者不会将消息直接发送给订阅者,这意味着发布者和订阅者不知道彼此的存在。在发布者和订阅者之间存在第三个组件,称为调度中心或事件通道,它维持着发布者和订阅者之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅者

let pubsub={
  subscribers:[],
  subscribe:(topic,callback)=>{
    let callbacks = pubsub.subscribers[topic];
    if(!callbacks){
       pubsub.subscribers[topic]=[callback];
    }else{
      callbacks.push(callback);
    }
  },
  publish:(topic,...args)=>{
    let callbacks = pubsub.subscribers[topic]||[];
    callbacks.forEach(callback=>{
      callback(...args);
    })
  }
}

pubsub.subscribe('微博',(a)=>{console.log(a)})
pubsub.subscribe('微博',(a)=>{console.log(a)})
pubsub.publish('微博','去吃饭');
Last Updated 10/16/2023, 7:06:22 AM
What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8