设计模式-观察者模式

 第一种方式:拉
  1. package com.work.pattern.observer;
  2. /**
  3.  * @author wangmingjie
  4.  * @date 2008-6-29下午07:21:38
  5.  */
  6. import java.util.Observable;
  7. import java.util.Observer;
  8. public class EvenObserver implements Observer {
  9.     public void update(Observable o, Object arg) {
  10.         if (o instanceof NumsObservable)
  11.             if (((NumsObservable) o).getData()%2 == 0) {
  12.                 NumsObservable myObserable = (NumsObservable) o;
  13.                 System.out.println("EvenObserver:Data has changed to "
  14.                         + myObserable.getData());
  15.             }
  16.     }
  17. }
  1. package com.work.pattern.observer;
  2. import java.util.Observable;
  3. /**
  4.  * @author wangmingjie
  5.  * @date 2008-6-29下午07:19:30
  6.  */
  7. public class NumsObservable extends Observable {
  8.     public final static Integer ODD = 1;
  9.     public final static Integer EVEN = 2;
  10.     private int data = 0;
  11.     public int getData() {
  12.        return data;
  13.     }
  14.     public void setData(int i) {
  15.        data = i;
  16.        Integer flag = 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. public class NumsObservable extends Observable {
  2.     public final static Integer ODD = 1;
  3.     public final static Integer EVEN = 2;
  4.     private int data = 0;
  5.     public int getData() {
  6.        return data;
  7.     }
  8.     public void setData(int i) {
  9.        data = i;
  10.        Integer flag = 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. public class EvenObserver implements Observer {
  2.     public void update(Observable o, Object arg) {
  3.         if (arg == NumsObservable.EVEN) {
  4.             NumsObservable myObserable = (NumsObservable) o;
  5.             System.out.println("EvenObserver:Data has changed to "
  6.                     + myObserable.getData());
  7.         }
  8.     }
  9. }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值