JAva Observerモード再構成Duplicate Observed Data
3335 ワード
今日また《再構築》のこの本を見て、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つの部分に分けられ、商品類です.顧客類テストクラス;
対象者クラス:
方法は、内部フラグビットを設定してデータが変化したことを示すために使用される.
notifyObservers()
メソッドは、オブジェクトリスト内のすべてのオブジェクトを呼び出します.
Observer
の
update()
メソッドは、データが変化したことを通知します.
だけ
setChange()
呼び出された後、
notifyObservers()
呼び出す
update()
.
オブザーバクラス:
Observer
インタフェースの唯一の方法
update
Object arg
に対応
notifyObservers(Object arg);
渡されたパラメータは、実行されたときに
notifyObservers();
の場合、
arg
を選択します.
null
.
観察者モードは,観察者を用いて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
.