いたずらっ子のらくがき

色々リニューアル。

observer パターン その2

2007-11-29 00:10:30 | デザインパターン
java.util パッケージの Observer インターフェースと Observable クラスを使って
Observer パターン。

ObserverObservable についてはそれぞれ参照。リファレンスは使っていかないとね。

Observable クラスに setChanged() というメソッドがある。このメソッドは、
監視している対象が変更されたことをオブジェクトに教える(true をセットする)ためのもの。
notifyObservers(Observer への通知)は true なら通知、
false なら何もしないようになってる。これで変更されるたびに通知なんていう状況はなくなるね。

これらを使えば、一から実装しなくてもいいから便利だね。
…と言いたい所だけど、弊害もないわけじゃない。

1 つ目。protected で保護されたメソッドがいくつかあるよね。
これらを利用するには、サブクラス化しないとどうしようもない。
要は Observable クラスのオブジェクトを作成しても意味ないよってこと。
必ずサブクラス化しなさいってこと。

2 つ目。Observable がクラスだってこと。
java では複数のクラスを継承できない…てことは他のスーパークラスを
継承しているクラスには追加できないってことになる。これじゃ再利用性が下がるね。

でも、こういう問題点を把握しておけばこれらを適切に利用できるようになるよね。
Observer パターンを独自に実装しても良いし、利用可能なら Observable クラスを
使うのも良い。適切な方を選択するべし。

最初に言ったけど Observer パターンは JDK でよく使われてる。
例えば Swing。Swing ではオブザーバのことをリスナって呼ぶ。
リスナの追加・削除、イベントの監視。これは間違いなく Observer パターンだね。