观察者模式的推模式与拉模式
观察者模式中的推模式和拉模式是两种不同的信息传递方式:
推模式
-
定义: 在推模式中,主题(被观察者)主动将变化的数据发送给观察者。
-
实现: 每当主题状态改变时,它会将更新后的数据直接推送给所有注册的观察者。
-
优点: 观察者不需要主动请求数据,减少了请求的复杂性。
-
缺点: 可能会发送多余的数据,导致性能问题,尤其是当观察者只需要部分数据时。
拉模式
-
定义: 在拉模式中,观察者从主题中主动获取所需的数据。
-
实现: 主题只通知观察者有变化发生,具体的数据由观察者自行从主题中拉取。
-
优点: 观察者可以选择需要的数据,减少不必要的数据传输。
-
缺点: 需要观察者主动请求数据,增加了实现的复杂性。
区别
-
数据传输方式:
-
推模式:主题主动发送数据。
-
拉模式:观察者主动获取数据。
-
-
控制权:
-
推模式:主题控制数据传递。
-
拉模式:观察者控制数据获取。
-
-
数据量:
-
推模式:可能导致数据冗余。
-
拉模式:更灵活,获取所需的数据。
-
典型示例
RxJava使用基于观察者模式的推模式(push-based),而 Flow 使用 Kotlin 协程的挂起函数(suspend functions)实现拉模式(pull-based)

浙公网安备 33010602011771号