デザインパターン[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側が処理をする。

こうすることで、複雑で分散しがちな監視処理を一箇所にまとめ
かつ、柔軟にその時の処理を書くことができる。

非常に有用なパターンで、これが便利だと分かる人は
オブジェクト脳が芽生えている証拠と言っても過言ではない。

ぜひ役立てていただきたいものだ。