手记

观察者模式学习--使用jdk的工具类简单实现

观察者模式学习之二:使用jdk的自带的工具类实现,与自己实现相比,两者有以下的区别:

1,自己实现,需要定义观察者的接口类和目标对象的接口类。使用java util的工具类,则不需要自己定义观察者和目标对象的接口类了,jdk已经定义好了。

2,自己实现,具体的目标对象类中,实现了接口方法后,还必须要自己实现维护观察者的注册删除信息。但是使用jdk,则不需要了,在

jdk的util下的observable类里面已经帮忙维护好了。

3,目标对象触发观察者的update的通知方式有了变化,自己的实现,只要定义好触发方法,调用观察者的接口的update方法就好了。使用jdk则必须要先先调用setChange()方法,否则,不会触发通知,通知观察者变化。这是java为了帮助实现更加精准的触发控制而提供的功能方法。

4,具体的观察者类的实现中,update方法有区别,自己实现的,需要按照自己的需要定义好是按照推模式,还是拉模式,定义update的方法参数。但是 使用jdk,则update的方法中包含了传送的参数和目标对象的引用。能够同时满足推模式和拉模式的实现

实例如下:

package zhgapp.ztd.com.rx_java.Rx_java2;

import java.util.Observable;
import java.util.Observer;

/**
 * 观察者类
 * Created by Administrator on 2016-12-27.
 */
public class SimpleObserver implements Observer{

    public SimpleObserver(SimpleObsevable obsevable){
        obsevable.addObserver(this);
    }
    //当被观察者发生改变的时候会调用
    @Override
    public void update(Observable observable, Object o) {
            System.out.println("data in changed:"+((SimpleObsevable)observable).getData());
    }
}
package zhgapp.ztd.com.rx_java.Rx_java2;

import java.util.Observable;

/**创建一个被观察者
 * Created by Administrator on 2016-12-27.
 */
public class SimpleObsevable extends Observable{
    private int data=0;
    public int getData(){
        return data;
    }

    public void setData(int i){
        if(this.data!=i){
            this.data=i;
            setChanged();//发生变化
            notifyObservers();//告知观察者
        }
    }
}
package zhgapp.ztd.com.rx_java.Rx_java2;

/**
 * 测试类
 * Created by Administrator on 2016-12-27.
 */
public class Test {

    public static void main(String[] args){
        SimpleObsevable simpleObsevable=new SimpleObsevable();
        SimpleObserver observer=new SimpleObserver(simpleObsevable);

        simpleObsevable.setData(1);
        simpleObsevable.setData(2);
        simpleObsevable.setData(3);

    }

}

原文链接:http://www.apkbus.com/blog-813041-62856.html

0人推荐
随时随地看视频
慕课网APP