JAva Observerモード再構成Duplicate Observed Data


今日また《再構築》のこの本を見て、8.6この1編:Duplicate Observed Data、類似の観察者モードの方法を使うことができて、ユーザーインタフェースの処理業務ロジックのコードを分けて、MVCモードのようです;
    観察者モードは,観察者を用いてview層のデータ変化に常に注意していることに相当し,変化するとController層を用いて業務処理を行い,view--Controllerを隔離する必要がある.
    Springでは、Springイベント処理のような方法は、オブザーバーモードとしても理解できます.
        ◆Eventクラスを定義し、org.springframework.context.ApplicationEventを継承します.        ◆配布イベントクラスPublisherを作成し、org.springframework.context.ApplicationContextAwareインタフェースを実現する.        ◆上書き方法setApplicationContext(ApplicationContext applicationContext)と配布方法publish(Object obj).        ◆時間傍受クラスEventListenerを定義し、ApplicationListenerインタフェースを実現し、実現方法onApplicationEvent(ApplicationEvent event)を実現する.
    Springイベントの処理方法については、この文書ではあまり説明されていません.
   
    次に、電子商取引システムでよく遭遇する例を書きます.商品の価格が変化した場合、この商品の価格変化の事件を対応する会員に通知します.例えば、値下げ通知の簡単な実現です.
    コードは3つの部分に分けられ、商品類です.顧客類テストクラス;
    
package observer;

import java.util.Observable;

public class Good extends Observable {
	private String name;
	private float price;

	public Good(String name, float price) {
		this.name = name;
		this.price = price;
	}

	public String getName() {
		return name;
	}

	public float getPrice() {
		this.notifyObservers(price);
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
		/*
		 *    :                  setChanged()                 ,
		 */
		this.setChanged();
		/*
		 * notifyObservers                ,       clearChanged                 。
		 */
		this.notifyObservers(price);
	}
}
package observer;

import java.util.Observable;
import java.util.Observer;

public class Customer implements Observer {
	private String name;

	public Customer(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void update(Observable observable, Object arg) {
		if (observable instanceof Good && arg instanceof Float) {
			System.out.println("VIP  <" + this.name + ">   : "
					+ ((Good) observable).getName() + "     ," + arg + "   !");
		}
	}
}
package observer;

public class Test {
	public static void main(String[] args) {
		Good good = new Good("  A", 1.0f);
		
		Customer alexgaoyh_1 = new Customer("alexgaoyh_1");
		Customer alexgaoyh_2 = new Customer("alexgaoyh_2");
		
		good.addObserver(alexgaoyh_1);
		good.addObserver(alexgaoyh_2);
		
		good.setPrice(10.0f);
		good.setPrice(30.0f);
	}
}
以上の3つのコードの簡単な実現は、商品の価格が変化すると、対応する顧客にタイムリーに通知することを実現した.
対象者クラス: 
extends java.util.Observable
    よびだし
void addObserver(Observer o)
観察されたイベントが発生した場合、次のことが実行されます.
setChanged();
notifyObservers();
setChange()
方法は、内部フラグビットを設定してデータが変化したことを示すために使用される.
notifyObservers()
メソッドは、オブジェクトリスト内のすべてのオブジェクトを呼び出します.
Observer

update()
メソッドは、データが変化したことを通知します.
だけ
setChange()
呼び出された後、
notifyObservers()
呼び出す
update()
.
オブザーバクラス:
implements java.util.Observer
実現する
Observer
インタフェースの唯一の方法
update
void update(Observable o, Object arg)
パラメータ
Object arg
に対応
notifyObservers(Object arg);
渡されたパラメータは、実行されたときに
notifyObservers();
の場合、
arg
を選択します.
null
.