简介:

在java.util包下,

  1. 观察者继承observable类,设置变化点setChanged();通知改变的内容notifyObservers();

  2. 被观察者继承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是改变的变量