观察者模式的推模式与拉模式

观察者模式中的推模式和拉模式是两种不同的信息传递方式:

推模式

  • 定义: 在推模式中,主题(被观察者)主动将变化的数据发送给观察者。

  • 实现: 每当主题状态改变时,它会将更新后的数据直接推送给所有注册的观察者。

  • 优点: 观察者不需要主动请求数据,减少了请求的复杂性。

  • 缺点: 可能会发送多余的数据,导致性能问题,尤其是当观察者只需要部分数据时。

拉模式

  • 定义: 在拉模式中,观察者从主题中主动获取所需的数据。

  • 实现: 主题只通知观察者有变化发生,具体的数据由观察者自行从主题中拉取。

  • 优点: 观察者可以选择需要的数据,减少不必要的数据传输。

  • 缺点: 需要观察者主动请求数据,增加了实现的复杂性。

区别

  1. 数据传输方式:

    1. 推模式:主题主动发送数据。

    2. 拉模式:观察者主动获取数据。

  2. 控制权:

    1. 推模式:主题控制数据传递。

    2. 拉模式:观察者控制数据获取。

  3. 数据量:

    1. 推模式:可能导致数据冗余。

    2. 拉模式:更灵活,获取所需的数据。

典型示例

RxJava使用基于观察者模式的推模式(push-based),而 Flow 使用 Kotlin 协程的挂起函数(suspend functions)实现拉模式(pull-based)

posted @ 2025-02-06 20:03  ZJHqs  阅读(51)  评论(0)    收藏  举报