一、观察者模式概要
在多个对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新,也就是发布订阅模式。当发布者发布消息时,,订阅了此发布者的人能监听到信息,,没订阅此发布者的人就收不到信息。
解决的问题:
是系统中一对多传递消息的一种实现方式,在特定的环境中,能表现出优秀的性能。
优点:
在一定程度上解耦,降低了系统耦合性,采用观察者模式的发布者和监听者比传统消息传递机制有更好的模块性。
缺点:
前者不关心传递消息传递后的结果,当观察者收到的不完整的消息或消息在传输过程中发生变化时,不容易追溯纠错。
2、Network-Monitor应用
Network-Monitor是一个运用观察者模式写的网络状态监听库
github地址:https://github.com/shonegg/NetMonitor
应用包括被观察者、观察者和广播接收者
如果广播接收者收到了网络变化广播,就会解析当前具体网络类型,然后通知被观察者(Observable),被观察者通知所有观察者网络有变化了和当前网络类型
其中,网络变化有以下几种类型UNKNOWN, WIFI, MOBILE, MOBILE2G, MOBILE3G, MOBILE4G
2.1网络状态被观察者
网络状态被观察者NetworkObservable
public class NetworkObservable extends Observable { private Context context; public NetworkObservable(Context context) { super(); this.context = context; } @Override public void addObserver(Observer observer) { try { super.addObserver(observer); // 刚注册就更新一下网络状况 NetworkType networkType = NetworkManager.getNetworkType(context); WifiSignalLevel wifiSignalLevel = NetworkManager.getWifiSignalLevel(context); observer.update(this, new NetworkAction(networkType, wifiSignalLevel)); } catch (Exception e) { e.printStackTrace(); } } @Override public void notifyObservers(Object data) { try { this.setChanged(); super.notifyObservers(data); } catch (Exception e) { e.printStackTrace(); } } }
2.2网络状态观察者
网络状态观察者NetworkObserver
public abstract class NetworkObserver implements Observer { @Override public void update(Observable observable, Object o) { this.onNetworkStateChanged(((NetworkAction) o)); } public abstract void onNetworkStateChanged(NetworkAction action); }