JDK中提供的实现

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

1,Observable类

Observable 类是抽象目标类(被观察者),它有一个 Vector 集合成员变量,用于保存所有要通知的观察者对象,下面来介绍它最重要的 3 个方法。

  • void addObserver(Observer o) 方法:用于将新的观察者对象添加到集合中。
  • void notifyObservers(Object arg) 方法:调用集合中的所有观察者对象的 update方法,通知它们数据发生改变。通常越晚加入集合的观察者越先得到通知。
  • void setChange() 方法:用来设置一个 boolean 类型的内部标志,注明目标对象发生了变化。当它为true时,notifyObservers() 才会通知观察者。

2,Observer 接口

Observer 接口是抽象观察者,它监视目标对象的变化,当目标对象发生变化时,观察者得到通知,并调用 update 方法,进行相应的工作。

【例】警察抓小偷

警察抓小偷也可以使用观察者模式来实现,警察是观察者,小偷是被观察者。代码如下:

小偷是一个被观察者,所以需要继承Observable类

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

  1. 观察者模式--java jdk中提供的支持

    一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...

  2. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  3. java logging包_用JDK中提供的java.util.logging.*包创建Logger对象----原创

    由于项目中用到了Applet与Servlet之间(客户端用Applet.Server端用Servlet)的通信,要求: 1:>客户端与服务端必须出Log. 2:>浏览器在加载Applet时 ...

  4. java ssl证书生成_java – 使用jdk中提供的keytool生成SSL证书

    我在Web应用程序中使用的密钥库文件已于上周过期.我很久以前就生成了它.所以我开始使用keytool生成新证书.我使用此证书连接事务服务器和Web服务器.我想为此应用程序使用自签名证书.我使用以下命令 ...

  5. jdk中提供的Collection、Collections、Collector、Collectors你分的清楚?

    初次一看四个有点相似,而且有些时候一不小心还真有可能敲错,因为喜欢代码提示没仔细看提示,结果通过.去调用结果发现没有找到你想用的方法.所以写代码的时候需要注意一点这个区别 Collections.em ...

  6. zipentry java_java.util.zip 类 ZipEntry - Java 中文参考手册

    java.lang.Object java.util.zip.ZipEntry 所有已实现的接口:Cloneable 直接已知子类:JarEntry public class ZipEntryexte ...

  7. java图片缩放工具类,一个JAVA图形缩放处置工具类

    一个JAVA图形缩放处理工具类 调用的例子 import java.io.FileOutputStream; import java.io.IOException; import javax.imag ...

  8. java 历遍 类_[Java] 遍历指定包名下所有的类(支持jar) | 学步园

    项目需要,仅做记录. 支持包名下的子包名遍历,并使用Annotation(内注)来过滤一些不必要的内部类,提高命中精度. 通过Thread.currentThread().getContextClas ...

  9. java对象与类ppt,JAVA语言对象与类.ppt

    JAVA语言对象与类.ppt 第三章 对象与类,3.1 类与对象 3.2 定义类 3.3 成员变量的作用域 3.4 方法重载 3.5 创建对象 3.6 构造方法 3.7 this关键字 3.8 初始化 ...

最新文章

  1. 第五周项目四-长方柱形(1)
  2. 成功解决h5py\_init_.py:26:FutureWarning: Conversion of the second argument of issubdtype from `float` to
  3. 刷抖音对手机有什么要求_6频段全面5G手机 nova6 5G成新年换机最佳之选
  4. Dapr + .NET 实战(十三)跨语言开发
  5. 安装了一次Linux,哈哈
  6. 日常护理常识以及化妆品的选购 - 健康程序员,至尚生活!
  7. css两张图片怎么合在一起_PhotoShop怎么把两张图片合成一张?怎么用ps把两张图片合成一张?...
  8. nvinfer1::cudnn::Engine::deserialize()出错的原因
  9. 【手写数字识别】基于matlab GUI RBM神经网络手写数字识别【含Matlab源码 1109期】
  10. WizTree v4.03 最快的磁盘空间分析工具中文便携版
  11. View 添加阴影效果
  12. Day2:Surveying China’s livestreaming economy
  13. 【AWVS】python调AWVS接口 新建扫描并导出扫描报告 [自定义扫描报告](三)
  14. 彻底退出,刘强东转让所持京东股份;华为前三季研发费用超 1100 亿;腾讯会议部分功能开始收费 | EA周报...
  15. 住友重机械工业株式会社获得在日本生产和销售基于加速器的BNCT系统和照射剂量计算程序的医疗器械审批许可
  16. 《那些年入上百万的人是如何做到的》读后感
  17. Mothur1_Mothur的简介及运行准备
  18. 程序员是呆在一个公司等涨工资好,还是跳槽涨工资好?
  19. URL去除.php或.html等后缀
  20. 2019年最火热的APP营销

热门文章

  1. 面向对象——构造方法(重载)
  2. Vue2 学习笔记3
  3. 【oracle】oracle经典sql,exception,database link纠错
  4. T1683 车厢重组 codevs
  5. mof格式的文件怎么打开?用什么工具?
  6. 数学图形(1.46)高次方程曲线
  7. Atitit sql计划任务与查询优化器--统计信息模块
  8. 北航算法作业一 约瑟夫环问题
  9. php7的redis和yaf的扩展安装
  10. 【转】解决wine中文乱码的问题