Observer(觀察者)模式是比較常用的一個模式,尤其在界面設(shè)計中應(yīng)用廣泛,而本站所關(guān)注的是Java 在電子商務(wù)系統(tǒng)中應(yīng)用,因此想從電子商務(wù)實例中分析Observer 的應(yīng)用。
雖然網(wǎng)上商店形式多樣,每個站點有自己的特色,但也有其一般的共性,單就“商品的變化,以便及時通知訂戶”這一點,是很多網(wǎng)上商店共有的模式,這一模式類似Observer patern。
具體的說,如果網(wǎng)上商店中商品在名稱價格等方面有變化,如果系統(tǒng)能自動通知會員,將是網(wǎng)上商店區(qū)別傳統(tǒng)商店的一大特色。這就需要在商品product 中加入Observer 這樣角色,以便product 細節(jié)發(fā)生變化時,Observer 能自動觀察到這種變化,并能進行及時的update 或notify 動作。
Java 的API 還為為我們提供現(xiàn)成的Observer 接口Java.util.Observer。我們只要直接使用它就可以。
我們必須extends Java.util.Observer 才能真正使用它:
1.提供Add/Delete observer 的方法;
2.提供通知(notisfy) 所有observer 的方法;
//產(chǎn)品類:可供Jsp 直接使用UseBean 調(diào)用,該類主要執(zhí)行產(chǎn)品數(shù)據(jù)庫插入更新。
public class product extends Observable{
private String name;
private float price;
public String getName(){
return name;
}
public void setName(){
this.name=name;
//設(shè)置變化點
setChanged();
notifyObservers(name);
}
public float getPrice(){
return price;
}
public void setPrice(){
this.price=price;
//設(shè)置變化點
setChanged();
notifyObservers(new Float(price));
}
//以下可以是數(shù)據(jù)庫更新 插入命令。
public void saveToDb(){
.....................
}
我們注意到,在product 類中 的setXXX 方法中,我們設(shè)置了 notify(通知)方法,當(dāng)Jsp 表單調(diào)用setXXX(如何調(diào)用見我的另外一篇文章),實際上就觸發(fā)了notisfyObservers 方法,這將通知相應(yīng)觀察者應(yīng)該采取行動了。
下面看看這些觀察者的代碼,他們究竟采取了什么行動:
//觀察者NameObserver 主要用來對產(chǎn)品名稱(name)進行觀察的。
public class NameObserver implements Observer{
private String name=null;
public void update(Observable obj,Object arg){
if (arg instanceof String){
name=(String)arg;
//產(chǎn)品名稱改變值在name 中。
System.out.println("NameObserver :name changet to "+name);
}
}
}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |