您的位置:首页 > 其它

观察者设计模式(Observable类Observer接口)的实现demo

2015-03-12 17:55 661 查看


今天学习BaseAdapter源码的时候发现其持有数据观察对象,点到底层发现原来观察者模式是java.util包中已经提供了的。

其中,DataSetObservable,Observable,DataSetObserver.

BaseAdapter持有DataSetObservable对象,DataSetObservable继承Observable。

public abstract class BaseAdapter implements ListAdapter,SpinnerAdapter{
private final DataSetObservable mDataSetObservable = new DataObservable();
}

public class DataSetObservable extends Observable<DataSetObserver>{

}


Observable里面有注册观察者解注册观察者方法,DataSetObserver抽象类里面有onChanged()和onInvalidated()两个方法。

DataSetObserver介绍 文章地址:http://www.cnblogs.com/jimwind/archive/2013/01/24/2875072.html

下面是观察者模式的一个demo:
importjava.util.* ;
classHouse extendsObservable{ // 表示房子可以被观察
privatefloat price ;// 价钱
publicHouse(floatprice){
this.price = price ;
}
publicfloat getPrice(){
returnthis.price ;
}
publicvoid setPrice(floatprice){
// 每一次修改的时候都应该引起观察者的注意
super.setChanged() ;    // 设置变化点
super.notifyObservers(price) ;// 价格被改变
this.price = price ;
}
publicString toString(){
return"房子价格为:" + this.price ;
}
};

classHousePriceObserver implementsObserver{
privateString name ;
publicHousePriceObserver(String name){ // 设置每一个购房者的名字
this.name = name ;
}
publicvoid update(Observable o,Object arg){
if(arginstanceofFloat){
System.out.print(this.name + "观察到价格更改为:") ;
System.out.println(((Float)arg).floatValue()) ;
}
}
};

publicclass ObserDemo01{
publicstatic void main(String args[]){
House h = newHouse(1000000) ;
HousePriceObserver hpo1 = newHousePriceObserver("购房者A") ;
HousePriceObserver hpo2 = newHousePriceObserver("购房者B") ;
HousePriceObserver hpo3 = newHousePriceObserver("购房者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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐