Observer
デザインパターン
の一種.
イベントの通知と購読を実現する.
実績
のような
システム
を構築する時,「ボスで死んだ」を実装する場合.
「ボス戦で死んだ時の処理に
unlock()
を埋め込む」のではコードが散逸する.
「ボス戦で死んだ時に外部に
Notify()
し,
実績
を管理する
クラス
が
通知
を受け取って
実績
解除処理を行う」が良い.
Observer
に
通知
を送っている間,
subject
は自分の処理を行えないことに注意.
Observer
が多すぎるなどの場合に有意に差が出るかも.
subject
と
Observer
の繋がりが明示的でないため,
通知
由来の
バグ
が見つけにくくなる問題はある.
subject
を渡すのではなく,
関数ポインタ
を渡すことで
通知
を受け取る方が好ましい.
GAME PROGRAMMING PATTERNS
Observer
が次の
Observer
への
ポインタ
を持つ
連結リスト
を用いることで,
Observer
追加時の
アロケーション
を回避できる.