观察者模式学习之二:使用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); } }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦