共通点
- どちらも「イベント通知の仕組み」
- 複数のオブジェクトに対して通知を行える
- 状態変化に応じた処理を実現
違い
項目 | Observer パターン | Pub-Sub(Publish/Subscribe) |
---|---|---|
依存関係 | Subject が Observer を直接知っている(参照を保持) | Publisher と Subscriber は お互いを知らない(Broker/MessageBus が仲介) |
通知の仕組み | Subject が Observer に 直接呼び出し | Publisher がイベントを Broker に送信し、Broker が Subscriber に配信 |
スコープ | アプリ内のオブジェクト間通知が多い | 分散システムやモジュール間通信にも使える |
実装の重さ | 軽量(リスト管理+ループ通知) | 重め(Message Queue / EventBus / Broker が必要) |
代表例 | Flutter: ValueNotifier , Android: LiveData
|
Kafka, RabbitMQ, Google Pub/Sub, EventBus, RxBus |
図解
Flutter / Android 実務での使い分け
-
Observer
- Flutter の
ValueNotifier
→ValueListenableBuilder
- Android の
LiveData
/Flow
- アプリ内部の「状態変化通知」に向いている
- Flutter の
-
Pub-Sub
- Flutter で
event_bus
パッケージを利用 - Android で EventBus(GreenRobot)や RxBus
- モジュール間通信、疎結合なイベント配信、クロスコンポーネント連携に向いている
- Flutter で
まとめ
- Observer = 「Subject が Observer を直接通知」 → 軽量・アプリ内部向き
- Pub-Sub = 「Broker が間に入って配信」 → 疎結合・モジュール/分散システム向き
Observer は「小さな範囲の通知」、Pub-Sub は「大規模・疎結合の通知」に適している。