JAVA中的觀察者模式observer

簡介:

在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是改變的變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章