第一种方式:拉
- package
- packagecom.work.pattern.observer;
- importjava.util.Observable;
- /**
- *@authorwangmingjie
- *@date2008-6-29下午07:19:30
- */
- publicclassNumsObservableextendsObservable{
- publicfinalstaticIntegerODD=1;
- publicfinalstaticIntegerEVEN=2;
- privateintdata=0;
- publicintgetData(){
- returndata;
- }
- publicvoidsetData(inti){
- data=i;
- Integerflag=EVEN;
- if((data&0x0001)==1)
- flag=ODD;
- setChanged();
- notifyObservers();//拉
- }
- //setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
- //只有在setChange()被调用后,notifyObservers()才会去调用update()。
- }
测试代码如下:
public class ObserverTest {
public static void main(String[] args) {
NumsObservable number = new NumsObservable();
number.addObserver(new EvenObserver());
number.setData(1);
number.setData(2);
number.setData(3);
}
}
第二中方式是推:
- publicclassNumsObservableextendsObservable{
- publicfinalstaticIntegerODD=1;
- publicfinalstaticIntegerEVEN=2;
- privateintdata=0;
- publicintgetData(){
- returndata;
- }
- publicvoidsetData(inti){
- data=i;
- Integerflag=EVEN;
- if((data&0x0001)==1)
- flag=ODD;
- setChanged();
- notifyObservers(flag);//推送方式
- }
- //setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
- //只有在setChange()被调用后,notifyObservers()才会去调用update()。
- }
- publicclassEvenObserverimplementsObserver{
- publicvoidupdate(Observableo,Objectarg){
- if(arg==NumsObservable.EVEN){
- NumsObservablemyObserable=(NumsObservable)o;
- System.out.println("EvenObserver:Datahaschangedto"
- +myObserable.getData());
- }
- }
- }