从汉语字面理解 观察者模式 和 订阅者模式 的区别

  很多文章都会将 观察者模式 和 订阅者模式 混为一谈,其实他们两个还是有本质区别的。

  举例来说:
  1、警察与小偷:小偷总是计划着犯罪,警察为了抓到证据(某类信息),不得不在暗处设岗观察,这是观察者模式;
  2、读者与邮局:邮局有报纸订阅服务,于是读者去邮局订阅了报纸(某类信息),这是订阅者模式。

  由上可见两者区别:
  1、订阅者模式下,订阅者被动接受信息、服务提供者主动提供服务;观察者模式下,观察者主动获取信息、被观察者并不知情;
  2、订阅者模式 需要在服务提供者处有订阅者列表,观察者模式 在被观察者处则没有 观察者名单列表;
  3、订阅者模式 有移除订阅者行为,观察者模式 则没有移除观察者行为;

  二者如何实现?
  订阅者模式:服务提供者有订阅者列表,并提供订阅和取消订阅的方法,当有信息变化时及时 推送 给订阅者,订阅者接收到信息;
  观察者模式:观察者主动 轮询 被观察者的静态信息和动态信息;

  结论:
  我们今天经常说的观察者模式,其实是订阅者模式,做的是信息流的推送,而非耗资源的轮询,所以 ReactiveCocoa 里面将变化的处理统一为 subscribeNext 方法,是以记。