美文网首页
观察者模式(Observer Pattern)——让你的对象知悉

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

作者: 坞约贝 | 来源:发表于2017-07-12 10:41 被阅读8次

概述

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。这里改变的对象被称为主题(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

总结

相关文章

网友评论

      本文标题:观察者模式(Observer Pattern)——让你的对象知悉

      本文链接:https://www.haomeiwen.com/subject/gwzvhxtx.html