Observer

購読者へイベント通知

状態変化を購読者へ通知する

このデモで分かること: 発行と反応を切り離して通知する

このデモで Observer を使う理由

  • イベント(発行)と、それに反応する処理(購読)を分けたい。
  • 発行側が購読者を全部知っていると、購読者が増えるたびに発行側を書き換え続ける。
  • Observer なら発行側は「通知する」だけ、誰が聞くかは購読登録で差し替えられる。

パターンなし vs このパターン(イメージ)

記事の本編ではなく、このデモ題材を if の山にした場合との対比です(疑似コード)。

パターンなし

// パターンなし(イメージ)
void publish() {
  loggerA.on(...);
  loggerB.on(...);
  // 購読者のたびにここを直す
}

Observer あり

// Observer
bus.subscribe(listener);
bus.publish(type, payload);
// → 発行側はリストに流すだけ

デモ

このデモで使っている主な型

EventBus · LoggingListener

操作 → 動いたクラス / メソッド

  1. 操作: 購読登録 / 解除 / イベント発行(直近のセッション状態)
  2. → 購読者数: 0
  3. → EventBus.subscribe / unsubscribe / publish
  4. → 各 LoggingListener.onEvent(...) … 購読者が反応
  5. → 右側ログは EventBus が記録した通知の軌跡

まだ購読者がいません。

イベントログ

ログはまだありません。購読してからイベントを発行してください。

このパターンの解説記事 ↗

記事は考え方・別サンプルの解説です。このページのデモ実装とはソースが異なります (クラス名・題材はデモ用に簡略化しています)。