天天看点

观察者设计模式( Observable类Observer接口)

观察者设计模式( Observable类Observer接口)

如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口。

import java.util.* ; 
class House extends Observable{ // 表示房子可以被观察 
    private float price ;// 价钱 
    public House(float price){ 
        this.price = price ; 
    } 
    public float getPrice(){ 
        return this.price ; 
    } 
    public void setPrice(float price){ 
        // 每一次修改的时候都应该引起观察者的注意 
        super.setChanged() ;    // 设置变化点 
        super.notifyObservers(price) ;// 价格被改变 
        this.price = price ; 
    } 
    public String toString(){ 
        return "房子价格为:" + this.price ; 
    } 
};  
class HousePriceObserver implements Observer{ 
    private String name ; 
    public HousePriceObserver(String name){ // 设置每一个购房者的名字 
        this.name = name ; 
    } 
    public void update(Observable o,Object arg){ 
        if(arg instanceof Float){ 
            System.out.print(this.name + "观察到价格更改为:") ; 
            System.out.println(((Float)arg).floatValue()) ; 
        } 
    } 
}; 
public class ObserDemo01{ 
    public static void main(String args[]){ 
        House h = new House(1000000) ; 
        HousePriceObserver hpo1 = new HousePriceObserver("购房者A") ; 
        HousePriceObserver hpo2 = new HousePriceObserver("购房者B") ; 
        HousePriceObserver hpo3 = new HousePriceObserver("购房者C") ; 
        h.addObserver(hpo1) ; 
        h.addObserver(hpo2) ; 
        h.addObserver(hpo3) ; 
        System.out.println(h) ; // 输出房子价格 
        h.setPrice(666666) ;    // 修改房子价格 
        System.out.println(h) ; // 输出房子价格 
    } 
};
           

运行结果: 房子价格为:1000000.0 购房者C观察到价格更改为:666666.0 购房者B观察到价格更改为:666666.0 购房者A观察到价格更改为:666666.0 房子价格为:666666.0