观察者模式在android网络监控下的运用
github:https://github.com/shonegg/NetMonitor
一.对观察者模式的理解:
1.观察者模式,又叫发布-订阅(Publish/Subscribe)模式,定义的是对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
2.观察者模式所涉及的角色有:
(1)抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。
(2)具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色又叫做具体被观察者(Concrete Observable)角色。
(3)抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口。
(4)具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态 像协调。如果需要,具体观察者角色可以保持一个指向具体主题对象的引用。
观察者结构图如下图所示:
二.android网络监控下的观察者模式运用
1、观察者相应接口代码:
可以看到,当观察者接收到来自被观察者的通知消息时,会做出相应的更新操作。
2.被观察者相应代码:
如果网络发生了变化,则被观察者就会通知所有观察者网络有变化了和以及告知观察者当前网络类型。
3.观察者容器:
可以看到,在观察者容器NetMonitor中定义了加入一个观察者(订阅)、删除一个观察者(取消订阅)等方法。
三.观察者模式在项目中优点总结:
(1)观察者和被观察者是抽象耦合的,被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。
(2)观察者模式可以进行广播通信,这个优点特在以上项目中得到了很好的应用。比如在源码中,NetApplication主要是内部初始化广播监听者,如果广播接收者收到了网络变化广播,就会解析当前具体网络类型,然后通知被观察者(Observable),被观察者通知所有观察者网络有变化了和当前网络类型,