观察者模式
观察者模式中存在两个主要对象,观察者对象和被观察者对象。
在软件设计的过程中,总是存在这样的需求,当对象A的数据A发生变化时,我们需要动态的更新对象B的数据,观察者模式因为这个需求而产生。
简单点说就是观察者对象监听被观察者对象,在被观察者对象中检查数据是否发生变化,如果数据发生变化就通知它的所有的观察者。在实际应用中我们以UI 和后台数据为例。
当后台数据发生变化时,我们需要动态的更新UI。可以将UI设计为一个观察者,后台数据设计为一个被观察者。一个被观察者可以有多个观察者。
从图中可以看出,被观察者对象(DataSubject) 总是持有多个观察者对象(DataObserver),它们之间是一种聚合关系。从业务的角度讲他们是一种监听关系。被监听者是被观者者,监听者是观察者。
在Android 中存在大量的这种监听者和被监听者,以Android4.X的Telephony 模块相关的数据监听为例子。
在CommandsInterface 中存在大量的register***,unregister*** 这样的方法就表示CommandsInterface 的实现类 BaseCommands,就是一个大的被监听者。BaseCommands 的派生类 RIL,将对从Modem 获取的数据变化发送到所有监听 RIL 数据的监听者对象中去,如电话状态变化,SIM卡状态发生变化,信号量发生变化等。
观察者模式中存在两个主要对象,观察者对象和被观察者对象。
在软件设计的过程中,总是存在这样的需求,当对象A的数据A发生变化时,我们需要动态的更新对象B的数据,观察者模式因为这个需求而产生。
简单点说就是观察者对象监听被观察者对象,在被观察者对象中检查数据是否发生变化,如果数据发生变化就通知它的所有的观察者。在实际应用中我们以UI 和后台数据为例。
当后台数据发生变化时,我们需要动态的更新UI。可以将UI设计为一个观察者,后台数据设计为一个被观察者。一个被观察者可以有多个观察者。
观察者模式的类图如下图所示
从图中可以看出,被观察者对象(DataSubject) 总是持有多个观察者对象(DataObserver),它们之间是一种聚合关系。从业务的角度讲他们是一种监听关系。被监听者是被观者者,监听者是观察者。
在Android 中存在大量的这种监听者和被监听者,以Android4.X的Telephony 模块相关的数据监听为例子。
在CommandsInterface 中存在大量的register***,unregister*** 这样的方法就表示CommandsInterface 的实现类 BaseCommands,就是一个大的被监听者。BaseCommands 的派生类 RIL,将对从Modem 获取的数据变化发送到所有监听 RIL 数据的监听者对象中去,如电话状态变化,SIM卡状态发生变化,信号量发生变化等。