←フエルチラシノウラ。トップページへもどる。

【Java】Observerパターンの簡単なサンプル。【デザインパターン】

Java Observerパターン デザインパターン Observable Observer イベントリスナー

オブジェクト指向な開発で大変よく利用されるデザインパターンのひとつObserverパターンの簡単な説明です。

Observerパターンとは


Observer(オブザーバー)パターンとは、
一人の観察対象者の通知を一人以上の観察者たちが観察し、観察対象者が何らかの通知をしたら、
観察者全員がその通知を一斉に受け取るような仕組みを実現するためのデザインパターンです。

以下はそのサンプルです。
インナークラスで全ての必要なクラスを賄っていますので、簡単に動かすことができます。
package hogeobserver;
import java.util.Observable;
import java.util.Observer;
/**
* Observerパターンのサンプル。
*/
public class Main {

public static void main(String[] args) {
new Main();
}

/**
* コンストラクタ
*/
public Main() {
// 観察される人を生成
ObservableMan observableMan = new ObservableMan();

// 観察者を2名追加
observableMan.addObserver(new ObserverA());
observableMan.addObserver(new ObserverB());

// 観察者全員に通知
observableMan.notifyObservers("xxx");
}

/**
* 観察される人。
*
*/
class ObservableMan extends Observable {

// 直前に与えられた引数
private String previousArg = null;

/**
* 観察者に通知します。
* @param オブジェクト
*/
public void notifyObservers(Object arg) {
String str = (String) arg;

// 直前に与えられた引数と同じならそのままリターン
if (str.equals(previousArg)) {
return;
}

previousArg = str;

setChanged();

// 通知
super.notifyObservers(str);

clearChanged();

}
}

/**
* 観察者を観察する人A。
*
*/
class ObserverA implements Observer {

/* (非 Javadoc)
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
public void update(Observable o, Object arg) {
String str = (String) arg;
System.out.println("私はAです。観察対象の通知を検知したよ。" + str);
}

}

/**
* 観察者を観察する人B。
*
*/
class ObserverB implements Observer {

/* (非 Javadoc)
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
public void update(Observable o, Object arg) {
String str = (String) arg;
System.out.println("わいはBや。観察対象の通知を検知したでぇ。" + str);
}

}
}


実行結果


わいはBや。観察対象の通知を検知したでぇ。xxx
私はAです。観察対象の通知を検知したよ。xxx

http://goodjob.boy.jp/chirashinoura/id/135.html

作成日: 2007-04-20 23:24:51

最終更新日: 2007-04-20 23:56:59

▲このページの上へ