【おぶざーばーぱたーん】

Observerパターン とは?

最終更新:
💡 変化があったら、登録した相手に知らせる仕組み

通知元に登録した複数の観察者へ、状態変化やイベントを知らせるデザインパターン。通知元は共通の通知用インターフェースを通じて相手を呼び、観察者ごとの具体的な処理を切り離せる。

📌 このページのポイント
登録した相手へ、変化を通知する Subject/通知元 状態が変化 登録先に通知する 登録先 A・B を保持 Observer A 画面を更新する Observer B ログに記録する 通知 通知 事前に登録。不要になったら登録を解除する 通知の順序や同期・非同期の扱いは実装による
通知元が登録済みの観察者へ知らせ、相手ごとに処理する例。
ひよこ ひよこ
具体的にどう使うの?
ペンギン先生 ペンギン先生
ニュースレターで考えると、通知元に読者が登録し、新着を登録先へ配信するような仕組みだよ。古典的な構成ではSubjectがObserverへの参照を持ち、共通の通知操作を呼ぶ。通知元は送信先を把握するけれど、各相手が画面更新やログ記録のどちらをするかまで知る必要はないんだ。
ひよこ ひよこ
JavaScriptでも使えるの?
ペンギン先生 ペンギン先生
button.addEventListenerでクリック時の処理を登録する仕組みは、通知元と受信処理を分ける身近な例だよ。DOMイベントには伝播など独自のルールもある。画面を更新する仕組みすべてをObserverと断定せず、誰が登録し、どこから通知されるかを見て考えるといいね。
ひよこ ひよこ
Pub/Subとの違いは?
ペンギン先生 ペンギン先生
古典的なObserverは通知元が登録相手への参照を持つ。一方、Pub/Subのメッセージングでは、イベントバスやブローカーなどが配信を仲介し、発行側が受信者を直接知らずに済む構成がよく使われる。似た用語が重なることもあるので、名前だけでなく実際の登録・配信経路を確認するんだ。
ひよこ ひよこ
注意点は?
ペンギン先生 ペンギン先生
使わなくなった登録を解除すること。長く生きる通知元が相手を参照し続けると、その相手も保持される場合があるよ。通知順序や同期・非同期の扱いは実装次第。通知を受けて元の状態を変えると連鎖することもあるので、変更条件を決める。頻度を減らす場合も、必要な通知を落とさない設計が大切だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Observerパターン」って出てきたら「登録した相手へ変化を通知する設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Observer Pattern」 = 観察者パターン
💬 observerは「観察者」。名前は監視を連想させるけれど、ここで説明する仕組みでは観察者が繰り返し調べるのではなく、通知元から知らせを受け取るよ

参考資料

← 用語集にもどる