观察者模式(Observer Pattern)——让你的对象知悉现状

概述

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。这里改变的对象被称为主题(Subject)(也叫可观察者),它的依赖者称为观察者(Observer)。

类图

这里将会是观察者模式的类图(电脑没工具,明天加上去)。

需要注意的东西

  • 观察者和主题之间是松耦合方式结合,即主题不知道观察者的具体实现,只知道观察者所实现的接口。
  • 使用此模式时,你可以通过推(push)和拉(push)数据。(后面将会介绍)
  • 有多个观察者时,不能依赖特定的次序。
  • java中有多种观察者模式的实现(多种暂时没找到),比较通用的是java.util.Observer(观察者)和java.util.Observable(主题)。
    需要注意的是,java.util.Observer是一个接口,而java.util.Observable是一个继承自Object的类。以下是jdk1.8中Observer和Observable的类图(此处后续加上类图):
public interface Observer{
  void update(Observable o, Object arg)
}

public class Observable extends Object{
  void addObserver(Observer o)
  protected void clearChanged()
  int countObservers()
  void deleteObserver(Observer o)
  void deleteObservers()
  boolean hasChanged()
  void notifyObservers()
  void notifyObservers(Object arg)
  protected void serChanged()
}

推(push)和拉(push)数据

这里将会是推拉数据的介绍。

应用场景**

场景说明

以气象监测为例。其中包含三个部分是气象站(获取实际气象数据的物理装置)、WeatherData对象(追踪来自气象站的数据,并更新布告板)和布告板(显示目前天气状况给用户看)。以下将利用观察者模式去利用weatherData对象去获取数据并更新布告板。

类图设计

这里是类图设计。

代码实现

code

总结

​

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    DeepThinkAI2026阅读 4,237评论 2赞 8
  • 1 场景问题# 1.1 订阅报纸的过程## 来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程...
    七寸知架构阅读 4,846评论 5赞 57
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,311评论 19赞 139
  • 观察者(Observer)模式 走进观察者模式 首先,先思考订阅报纸是怎么回事报社的业务就是出版报纸,并把报纸送给...
    廖少少阅读 550评论 3赞 0
  • 主要用途: 存放一些全局的宏(整个项目中都用得上的宏) ,用来包含一些全部的头文件(整个项目中都用得上的头文件) ...
    懒眉阅读 911评论 0赞 0

友情链接更多精彩内容