设计模式-观察者模式

第一种方式:拉
  1. package
com.work.pattern.observer; /** *@authorwangmingjie *@date2008-6-29下午07:21:38 */ import java.util.Observable; import java.util.Observer; public class EvenObserver implements Observer{ public void update(Observableo,Objectarg){ if (o instanceof NumsObservable) if (((NumsObservable)o).getData()% 2 == 0 ){ NumsObservablemyObserable=(NumsObservable)o; System.out.println( "EvenObserver:Datahaschangedto" +myObserable.getData()); } } }
  1. packagecom.work.pattern.observer;
  2. importjava.util.Observable;
  3. /**
  4. *@authorwangmingjie
  5. *@date2008-6-29下午07:19:30
  6. */
  7. publicclassNumsObservableextendsObservable{
  8. publicfinalstaticIntegerODD=1;
  9. publicfinalstaticIntegerEVEN=2;
  10. privateintdata=0;
  11. publicintgetData(){
  12. returndata;
  13. }
  14. publicvoidsetData(inti){
  15. data=i;
  16. Integerflag=EVEN;
  17. if((data&0x0001)==1)
  18. flag=ODD;
  19. setChanged();
  20. notifyObservers();//拉
  21. }
  22. //setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
  23. //只有在setChange()被调用后,notifyObservers()才会去调用update()。
  24. }

测试代码如下:

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);
}

}

第二中方式是推:

  1. publicclassNumsObservableextendsObservable{
  2. publicfinalstaticIntegerODD=1;
  3. publicfinalstaticIntegerEVEN=2;
  4. privateintdata=0;
  5. publicintgetData(){
  6. returndata;
  7. }
  8. publicvoidsetData(inti){
  9. data=i;
  10. Integerflag=EVEN;
  11. if((data&0x0001)==1)
  12. flag=ODD;
  13. setChanged();
  14. notifyObservers(flag);//推送方式
  15. }
  16. //setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
  17. //只有在setChange()被调用后,notifyObservers()才会去调用update()。
  18. }

  1. publicclassEvenObserverimplementsObserver{
  2. publicvoidupdate(Observableo,Objectarg){
  3. if(arg==NumsObservable.EVEN){
  4. NumsObservablemyObserable=(NumsObservable)o;
  5. System.out.println("EvenObserver:Datahaschangedto"
  6. +myObserable.getData());
  7. }
  8. }
  9. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值