デザインパターン[Observer]
年末ですね。
今年最後になろう日記はObserverパターンの紹介をば。
Observerパターンは、ある状態に変化した時にそれを見計らって何かが動くような、監視処理をする場合に非常に便利です。
Appletでは、〜ListenerってやつがObserverパターンの良い例です。
これ、結構難しく感じてた記憶がある。
デザパタの本だと難しく書いてあるからかもしれない。
やっていることは簡単なので、まずソースを見てみよう。
public interface Observer {
void change();
}
public class Subject {
private Observer observer;
public void setObserver(Observer o) {
observer = o;
}
public void Method() {
//いろいろな処理
if (changed) { //変化があった
observer.change();
}
}
}
public ObserverImpl implements Observer {
public void change() {
//変化があったときの処理
}
}
こんな感じだ。
監視対象のクラス(Subject)にObserverインターフェイスを登録できるようにして、何か変化があったときにその登録されたインターフェイスを呼び出すという動きになっている。
C#でいうならdelegateだ。Observerパターンよりスマートだね。
サンプルコードではObserverは1つしか登録できないが、
通常、複数登録できるようにしておく。
なにあったと感知する部分はSubjectだが知っていて、
何かあったときの処理はObserver側が処理をする。
こうすることで、複雑で分散しがちな監視処理を一箇所にまとめ
かつ、柔軟にその時の処理を書くことができる。
非常に有用なパターンで、これが便利だと分かる人は
オブジェクト脳が芽生えている証拠と言っても過言ではない。
ぜひ役立てていただきたいものだ。