为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Android

观察者模式学习之二:使用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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消