Android 设计模式之 观察者模式

作者:ivm

之前介绍了 单例模式,今天介绍一个使用频率与单例模式不相上下的 模式 观察者模式

《Android 源码设计模式 解析与实战》这本书很棒哦~

首先什么是观察者模式

观察者模式: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新

那么观察者模式的使用场景有哪些

1.事件多级触发场景

2.跨系统的消息交换场景, 如消息队列、事件总线的处理机制

3.关联行为的场景, 需要注意的是,关联行为是可拆分的,而不是”组合关系”

(后面会详细举例de)

观察者模式UML


Android 设计模式之 观察者模式_第1张图片
uml

角色介绍

Subject: 抽象主题,也就是被观察者(observable)的角色,抽象主题角色吧所有观察者对象的引用保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

ConcreteSubject:具体主题,该角色将有关状态存入具体观察者对象,在具体主题内部状态发生改变时,给所有注册过的观察者发送通知,具体主题角色又叫做具体被观察者(Concrete Observable)角色

Observer:抽象观察者,该角色是观察者的抽象类,它定义一个更新的接口,使得在得到主题的更改通知时更新自己。

ConcreteObjserver:具体的观察者,该角色实现抽象观察者角色所定义的更细接口,以便在得到主题的状态发生变化时更新资深的状态。

可能看着有点乱,简单来说 subject 被 observer 订阅,subject实现类对象 更新,会通知observer 的实现类对象 。如果还是听不明白的话。我就举一个例子

Coder类是订阅者

Android 设计模式之 观察者模式_第2张图片
coder

Dtf类 是被订阅 的对象类

Android 设计模式之 观察者模式_第3张图片
dtf

Test 类是测试类

Android 设计模式之 观察者模式_第4张图片
test

Android 中 ListVIew 添加数据 后 调用 listVIew adapter 的 notifyDataSetChanged ( ); 这个就是一个典型的观察者模式 至于适配器模式 之后我也会为大家介绍的。

BroadcastReceiver ,发送广播时,注册IntentFilter 的 广播就回收到这个消息 广播的onReceiver 就回被调用,也是一个典型的观察者模.

关注公众号 ,获取更多Android ,


Android 设计模式之 观察者模式_第5张图片
Mandroid

你可能感兴趣的:(Android 设计模式之 观察者模式)