观察者模式与订阅发布模式的区别
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('微博','去吃饭');