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