java 观察者模式

自定义观察者要实现java.util.Observer接口;
自定义被观察者要继承java.util.Observable基类;

观察者

/**
 * 观察者
 * 实现java.util.Observer接口
 */
public class NumObserver implements Observer{
    /**
     * This method is called whenever the observed object is changed. An
     * application calls an <tt>Observable</tt> object's
     * <code>notifyObservers</code> method to have all the object's
     * observers notified of the change.
     *
     * @param o   the observable object.
     * @param arg an argument passed to the <code>notifyObservers</code>
     */
    @Override
    public void update(Observable o, Object arg) {
        NumObservable numObserver=(NumObservable) o;
        System.out.println("data has changed to:"+((NumObservable) o).getData());
    }
}

被观察者

/**
 * 被观察者
 * - 继承java.util.Observable
 *
 * - 被观察者手动调用setChanged()和notifyObservers()方法后,就会自动通知
 *   被观察者的观察者列表中的所有观察者执行update()方法
 *
 * - 只有先调用setChanged()之后,notifyObservers()方法才会去调用update()方法
 */
public class NumObservable extends java.util.Observable{
    private int data;

    public void setData(int data){
        this.data=data;
        this.setChanged();
        //通知观察者
        this.notifyObservers(data);
    }
    public int getData(){
        return this.data;
    }
    public String toString(){
        return String.valueOf(this.data);
    }
}

测试

**
 * 测试类
 */
public class Test_ {
    @Test
    public void testObservableModel(){
        //被观察者
        NumObservable numObservable=new NumObservable();
        //观察者
        NumObserver observer=new NumObserver();
        //将观察者添加到被观察者的观察者列表中
        numObservable.addObserver(observer);
        //改变数值
        numObservable.setData(100);
        numObservable.setData(200);
        numObservable.setData(300);
    }
}

结果

/home/zhangjian/tools/jdk/bin/java
data has changed to:100
data has changed to:200
data has changed to:300

Process finished with exit code 0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值