簡介:
在java.util包下,
觀察者繼承observable類,設置變化點setChanged();通知改變的內容notifyObservers();
被觀察者繼承observer接口,覆寫uodate方法
要點:Observer中的update方法中的變量含義
代碼:被觀察者房子House類
package observer_java; import java.util.Observable; /** * 被觀察者需要繼承Observable類 * @author LCM * */ public class House extends Observable{ private String houseName; public String getHouseName() { return houseName; } public House(String houseName, double price) { super(); this.houseName = houseName; this.price = price; } public House() { super(); } public void setHouseName(String houseName) { this.houseName = houseName; } private double price; public double getPrice() { return price; } public void setPrice(double price) { this.setChanged();//設置變化點 this.notifyObservers(price);//通知所有觀察者改變價格 this.price = price; } @Override public String toString(){ return this.getHouseName()+"的價格是:"+this.getPrice(); } }
代碼二:觀察者購房者HouseObserve
package observer_java; import java.util.Observable; import java.util.Observer; /** * 觀察者需要集成接口observer * @author LCM * */ public class HouseObserver implements Observer{ private String name; public HouseObserver() { super(); } public HouseObserver(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } /**覆寫update方法,實現觀察者的方式 *update(Obervable o,Object arg)中的o是原來的對象,還未改變的,arg是改**變的變量 */ public void update(Observable o, Object arg) { // TODO Auto-generated method stub House h=(House)o; System.out.println("房子原來的價格是"+h.getPrice()); System.out.println(this.getName()+"發現房子價格變化:"+arg); } public static void main(String args[]){ House newHouse=new House("Bluse Lee",3000); HouseObserver observer1=new HouseObserver("observer1"); HouseObserver observer2=new HouseObserver("observer2"); HouseObserver observer3=new HouseObserver("observer3"); newHouse.addObserver(observer1); newHouse.addObserver(observer2); newHouse.addObserver(observer3); System.out.println(newHouse); newHouse.setPrice(5000); System.out.println(newHouse); } } //Bluse Lee的價格是:3000.0 //observer3發現房子價格變化:Bluse Lee的價格是:3000.0 //observer2發現房子價格變化:Bluse Lee的價格是:3000.0 //observer1發現房子價格變化:Bluse Lee的價格是:3000.0 //Bluse Lee的價格是:5000.0 //錯誤分析:update(Obervable o,Object arg)中的o是原來的對象,還未改變的,arg是改變的變量