推模型 vs 拉模型:两种数据传递方式
推荐一个学习网站,http://easelearningai.com 输入学习主题,会根据你的知识背景,帮你把学习内容讲得通俗易懂。
概要
简单说,观察者模式里的“推模型”和“拉模型”,就是一个消息该由发送方主动塞给你,还是由你主动去取。就像你订阅了一份报纸:推模型是邮递员每天把报纸送到你家门口;拉模型是报纸放在报摊上,你想看的时候自己去拿。
这两种方式没有绝对的好坏,关键看场景。今天我们就来聊聊,为什么会有这两种设计,它们各自解决什么问题,以及在实际开发中该怎么选。
整体架构流程
从“通知”这件事说起
想象一个典型的观察者模式场景:天气站(被观察者)检测到温度变化,然后通知所有显示屏幕(观察者)更新数据。
最早的设计很简单:天气站一有变化,就把所有数据(温度、湿度、气压)打包成一个消息,发给每个屏幕。屏幕收到后,直接更新显示——这就是推模型。
但问题来了:
- 如果某个屏幕只关心温度,不关心湿度和气压呢?它还是得接收全部数据,白白浪费了处理时间。
- 如果天气站每秒变化100次,每次都要打包所有数据发出去,网络和CPU开销很大。
于是有人想:能不能让屏幕自己决定要什么数据? 天气站只发一个“我变了”的信号,屏幕收到信号后,自己来查需要的数据——这就是拉模型。
两种模型的流程对比
| 步骤 | 推模型 | 拉模型 |
|---|---|---|
| 1. 状态变化 | 天气站温度变了 | 天气站温度变了 |
| 2. 通知方式 |
