简介:
在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是改变的变量