两者都是一种设计模式~
一、观察者模式
- 定义了对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。
- 例如:当你订阅了一份报纸,每天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸,报社和订报纸的客户就是上面文章开头所说的“一对多”的依赖关系。
二、发布-订阅模式
- 是观察者模式的一个别称,但是经过时间的沉淀,已经独立于观察者模式,成为另外一种不同的设计模式。发布者不会将消息直接发送给订阅者,两者之间并不知道对方的存在,而是通过“调度中心”进行两者的连接。
- 例如:你在微博上关注了A,同时其他很多人也关注了A,那么当A发布动态的时候,微博就会为你们推送这条动态。A就是发布者,你是订阅者,微博就是调度中心,你和A是没有直接的消息往来的,全是通过微博来协调的(你的关注,A的发布动态)。
相同点:
- 一对多
不同点:
- 观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。
- 观察者模式由具体目标调度,每个被订阅的目标里面都需要有对观察者的处理,这种处理方式比较直接粗暴,但是会造成代码的冗余。
- 而发布订阅模式中统一由调度中心进行处理,订阅者和发布者互不干扰,消除了发布者和订阅者之间的依赖。这样一方面实现了解耦,还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息,但是不想所有的订阅者都接收到,就可以在调度中心做一些处理,类似于权限控制之类的。还可以做一些节流操作。
借鉴:《浅谈发布订阅模式与观察者模式》