オブザーバーとは
OOPの代表的なデザインパターンの一つで、
- 一つの観測対象者オブジェクトと一つもしくは複数の観測者オブジェクトがある
- 観測対象者が観測者全員に通知を送ることができる
- 観測者が増えても既存のコード(観測対象者+観測者)を修正しなくてもいい
というもの。
よくある「イベント」もこのパターンで実装されているらしい。
埋め込み方法
観測者の登録
まず、観測対象者が観測者を把握していないといけないので、以下のaddSubscriber
メソッドのようなパブリックメソッドを用意しておく。観測者はそれを利用して観測対象者に自分を登録してもらう。(観測者のリストは設定ファイル等に保存しておく。)
通知
観測者に以下のupdate
メソッドのようなパブリックメソッドを用意しておく。通知するタイミングで観測対象者がループ処理などを使い全ての観測者のupdate
を呼び出す。観測者は渡された観測対象者のインスタンスから必要な情報を取って各々必要な処理を行う。
重要なのは観測者が増えてもnotifySubscribers
に変更が無いように実装すること(設定ファイルからサブスクライバーのIDを読み込む→ループ処理 等)。もちろんupdate
は無くてはならないのでインターフェースに書いておく
参考
めちゃめちゃわかりやすかった
https://refactoring.guru/design-patterns/observer