Observer
購読者へイベント通知
状態変化を購読者へ通知する
このデモで分かること: 発行と反応を切り離して通知する
このデモで Observer を使う理由
- イベント(発行)と、それに反応する処理(購読)を分けたい。
- 発行側が購読者を全部知っていると、購読者が増えるたびに発行側を書き換え続ける。
- Observer なら発行側は「通知する」だけ、誰が聞くかは購読登録で差し替えられる。
パターンなし vs このパターン(イメージ)
記事の本編ではなく、このデモ題材を if の山にした場合との対比です(疑似コード)。
パターンなし
// パターンなし(イメージ)
void publish() {
loggerA.on(...);
loggerB.on(...);
// 購読者のたびにここを直す
}
Observer あり
// Observer bus.subscribe(listener); bus.publish(type, payload); // → 発行側はリストに流すだけ
デモ
このデモで使っている主な型
EventBus · LoggingListener
操作 → 動いたクラス / メソッド
- 操作: 購読登録 / 解除 / イベント発行(直近のセッション状態)
- → 購読者数: 0
- → EventBus.subscribe / unsubscribe / publish
- → 各 LoggingListener.onEvent(...) … 購読者が反応
- → 右側ログは EventBus が記録した通知の軌跡
まだ購読者がいません。
イベントログ
ログはまだありません。購読してからイベントを発行してください。
このパターンの解説記事 ↗
記事は考え方・別サンプルの解説です。このページのデモ実装とはソースが異なります (クラス名・題材はデモ用に簡略化しています)。