オブジェクト指向設計


Observer パターン - オブザーバーパターン

2008/06/23 15:03Update
TAGS: Observerパターン | GoF | デザインパターン | OOD | オブジェクト指向設計

ObserverパターンはGoFによる23種類のデザインパターンの振る舞いに関連するパターンの一つです。Observerの和訳は「観察者、観測者」との意味で、Observerパターンはオブジェクトの内部状態の変化を観察して、そして関連するオブジェクトに自動的に通知する振る舞いを取るような機能を提供します。

Page:  <1|2>

Observerパターン の概要


Observerパターンの肝心的な部分が「変化を観察すること」、及び「変化されたことを関連オブジェクトに自動通知する」ことです。Observerパターンを利用すれば、オブジェクト同士の通信を簡単に行えるようになります。

Observerパターン の使用シーン


◇ オブジェクトの内部状態を変化する可能性がある
◇ 変化されたことを他のオブジェクトに通知する必要がある

よく使う例
◇ イベント処理
◇ 状態変化の観測
◇ Publisher/Subscriberモデルでは、外部イベント(新製品、ニュースなどの追加)による変化があった場合、メールにて利用者に通知

Observerパターン のメリット


◇ オブジェクト同士の(同期)通信ができる
◇ 各オブジェクトのクラス間の依存度を下げ、低結合度を実現することができる

Observerパターン のクラス図


Subject(観察対象となるクラス)
    1、観察される対象の抽象クラス。
    3、通知対象Observer(観察者)のリストを保持(追加、削除)する必要がある。
    3、該当クラスのオブジェクトの状態が変化される際、各Observer(観察者)に通知する必要がある。
ConcreteSubject
    Subjectの具体的な実装。
Observer(観察者)
    1、観察者の抽象クラス。
    2、Subjectオブジェクトの状態が変化される際、Observerオブジェクトにcallback関数で通知される(通知を受け取る)。
ConcreteObserver
    Observerの具体的な実装。

JDK(JAVA)でのObserverパターン


Javaでは、Observerパターンを簡単に実装できるようになっています。
◇ java.util.Observableクラス:「Subject」役に該当します。java.util.Observableクラスを継承したクラスはObserverパターンの「ConcreteSubject」役になります。
◇ java.util.Observerクラス:「Observer」役に該当します。java.util.Observerクラスを継承したクラスはObserverパターンの「ConcreteObserver」役になります。
◇ java.util.Observableの継承クラスはsetChanged()とnotifyObservers(Object)メソッドでObserverに変化を通知します。
もちろん、JDKのサポートを使わずに、Observerパターンの実装もできます。

次のページ:Observerパターン の使用例
Page:  <1|2>

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments