盒子
盒子
文章目录
  1. 介绍
  2. Android 中的应用:ListView

观察者模式

介绍

  • 定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
  • UML 图:如下。

从上图看出:

  • 在主题对象(Subject)中存在一个观察者集合 observerCollection。
  • 通过 registerObserver(observer) 将 observer 注册到 Subject;通过 unregisterObserver(observer) 取消注册。
  • 主题对象有一个 notifyObservers() 方法,当 Subject 对象状态发生变化时,就会主动调用该方法,通知注册在该对象的所有观察者调用 notify()

因此可以看出:一个观察者可以注册到多个主体对象中,一个主体对象也可以有多个观察者。

实际应用:你在门上装了一个防盗装置,当门关的时候就开始监听门的状态(注册了一个观察者),当门打开时就发出警报(调用了 notify())。

Android 中的应用:ListView

在 ListView 中我们会调用 setAdapter(adapter) 设置 ListView 的具体内容,但是实际上这个方法中还新建了一个观察者,并注册在 adapter 上:

mDataSetObserver = new AdapterDataSetObserver();
mAdapter.registerDataSetObserver(mDataSetObserver);

因此一个 ListView 中就有一个 AdapterDataSetObserver。当 adapter 内容发生改变时,开发者会调用 adapter.notifyDataSetChanged() ,这个方法的内部实现就是通知注册在 adapter 上的所有观察者调自己的 onChanged() 方法。

支持一下
扫一扫,支持xiazdong