很多文章都会将 观察者模式 和 订阅者模式 混为一谈,其实他们两个还是有本质区别的。
举例来说:
1、警察与小偷:小偷总是计划着犯罪,警察为了抓到证据(某类信息),不得不在暗处设岗观察,这是观察者模式;
2、读者与邮局:邮局有报纸订阅服务,于是读者去邮局订阅了报纸(某类信息),这是订阅者模式。
由上可见两者区别:
1、订阅者模式下,订阅者被动接受信息、服务提供者主动提供服务;观察者模式下,观察者主动获取信息、被观察者并不知情;
2、订阅者模式 需要在服务提供者处有订阅者列表,观察者模式 在被观察者处则没有 观察者名单列表;
3、订阅者模式 有移除订阅者行为,观察者模式 则没有移除观察者行为;
二者如何实现?
订阅者模式:服务提供者有订阅者列表,并提供订阅和取消订阅的方法,当有信息变化时及时 推送 给订阅者,订阅者接收到信息;
观察者模式:观察者主动 轮询 被观察者的静态信息和动态信息;
结论:
我们今天经常说的观察者模式,其实是订阅者模式,做的是信息流的推送,而非耗资源的轮询,所以 ReactiveCocoa 里面将变化的处理统一为 subscribeNext 方法,是以记。