2019独角兽企业重金招聘Python工程师标准>>>

最近在参与一个android项目的时候,看到里面用了Observer这东西,以前还不知道,搜罗了一下,发现一篇讲的简洁清晰的文章,搬来用一下,以后自己好看看: 在Java中通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。

1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)
addObserver()方法把观察者对象添加到观察者对象列表中。当被观察事件发生时,执行:
setChanged();
notifyObservers();

setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。只有在setChange()被调用后,notifyObservers()才会去调用update()。

[4]对于观察者类,实现Observer接口的唯一方法update:
void update(Observable o, Object arg)
形参Object arg,对应一个由notifyObservers(Object arg);传递来的参数,当执行的是notifyObservers();时,arg为null。
2. 实例一
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。

import java.util.Observable;public class NumObservable extends Observable {private int data = 0;public int getData() {return data;}public void setData(int i) {data = i;setChanged();notifyObservers();}
}
NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行uodate()方法。
import java.util.Observable;
import java.util.Observer;public class NumObserver implements Observer{public void update(Observable o, Object arg) {NumObservable myObserable=(NumObservable) o;System.out.println("Data has changed to " +myObserable.getData());}
}

测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。

public class SingleTest {public static void main(String[] args) {NumObservable number = new NumObservable();number.addObserver(new NumObserver());number.setData(1);number.setData(2);number.setData(3);}
}

结果:

Data has changed to 1
Data has changed to 2

Data has changed to 3 尊重劳动成果:http://zhangjunhd.blog.51cto.com/113473/68949/

转载于:https://my.oschina.net/javaTechLover/blog/341628

Java:应用Observer接口实现Observer模式相关推荐

  1. java observer_Java中的Observer接口实践Observer模式

    Observer源码 Observer是一个interface,只有一个update方法,两个参数,参数1位被观察者,参数2为被观察者额外传递的参数. /** * A class can implem ...

  2. java获取jsp 组件,利用Observer模式解决组件间通信问题-JSP教程,Java技巧及代码

    1. 问题的提出 以前做一个界面的时候常常会遇到这样的尴尬情况:希望保留各个独立的组件(类),但又希望它们之间能够相互通信.譬如windows中的explorer,我们希望鼠标点击左边是树型目录的一个 ...

  3. Java中使用Observer接口和Observable类实践Observer观察者模式

    在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...

  4. JDK中提供的实现——通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,只要实现它们的子类就可以编写观察者模式实例

    JDK中提供的实现 在 Java 中,通过 java.util.Observable 类和 java.util.Observer 接口定义了观察者模式,只要实现它们的子类就可以编写观察者模式实例. 1 ...

  5. 《研磨设计模式》chap12 观察者模式observer(1)模式简介

    场景:读者订杂志,订报纸,当有新的期刊和版本来了,读者怎么知道? 1. 模式介绍 public class Subject {//用来保存注册的观察者对象 private List<Observ ...

  6. 设计模式笔记 18. Observer 观察者模式(行为型模式)

    18. Observer 观察者模式                     2008-09-15 动机(Motivation) 在软件构建过程中,我们需要为某些对象建立一种"通知依赖关系& ...

  7. Java 设计模式之观察者模式(Observer pattern)

    观察者模式在软件编程中用的较多,我不善于表达我就用在网上看到的故事,和生活的例子说下基本思想 故事: 小雪是一个非常漂亮的女孩,漂亮的女孩总是有很多的追求者,而且追求者的队伍在不断的变动,随时有人进入 ...

  8. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  9. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

最新文章

  1. Linux主机下无报错安装Apache服务器
  2. 统计所有子串写到文件
  3. LeetCode-剑指 Offer 10- II. 青蛙跳台阶问题
  4. vue-cli 3.0配置webpack目录别名alias
  5. virsh 网络设置_KVM使用Network Filters进行虚拟机网络管理 | leon的博客
  6. Fedex Ship Manager Software安装
  7. LabVIEW: 无法执行该VI。
  8. wordpress api ajax,Woocommerce rest api - 在wordpress中通过ajax创建产品
  9. java 保存 设置_java的保存按钮怎么设置?
  10. Linux命令行截屏,Scrot:Linux 命令行截屏工具
  11. phonegap文件上传(java_php),Android应用开发之使用PhoneGap实现位置上报功能
  12. JavaScript高级知识点整理
  13. 结巴分词有前空格_结巴分词详细讲解
  14. 科普贴:示波器的组成
  15. 库卡机器人示教器截屏_库卡机器人示教器
  16. java pdf查看_Java检查PDF文件是否损坏
  17. 浅谈深度学习:了解RNN和构建并预测
  18. 2. linux默认的系统管理员账号是,2019.10第二周 王俊懿_Linux
  19. css文字超出宽度自动换行
  20. VIN码校验器:用于检查车架号是否符合国标

热门文章

  1. 两个有序链表序列的交集
  2. MySQL中通配类型各自作用_在Access数据库中。在查找操作中,通配符*、?与#各有什么作用?...
  3. 搭建配置cacti,采集信息监控
  4. Android 实现手写板技术
  5. linux下apache+openssl配置记录
  6. Arcengine实现创建网络数据集札记(二)
  7. C#时常需要调用C++DLL
  8. Ranger开源流水线docker化实践案例
  9. Intellij Idea插件利器推荐大全
  10. android 通知打开app,Android打开通知栏并回到主页的几种方式