Android 之 观察者模式
来源:互联网 发布:淘宝主图最好是多少kb 编辑:程序博客网 时间:2024/04/29 16:06
1.观察者模式的定义
观察者模式定义一种一对多的关系,使得没当一个被观察的对线发生变化,所有监听的对象都会收到通知。
2.观察者模式的UML图
3.观察着模式的例子
接下来举一个在Android中使用观察者模式的一个典型案例------>网络变换通知模型
首先定义抽象观察者 NetWorkObserver ,这里使用接口public interface NetWorkObserver { public void notifyNetStataChange(int state);}
然后定义具体的主题subject也就是被观察者NetWorkManager,这里结合单例模式
首先是组册观察者的方法:
public void registerNetWorkStateChangeListener(NetWorkObserver observer){ if (observers.contains(observer)) { return; } observers.add(observer);}然后是反注册观察者的方法public void unRegisterNetWorkStateChangeListener(NetWorkObserver observer){ if (observers.contains(observer)) { observers.remove(observer); }}最后是发送通知的方法public void notifyNetWorkStateChange(int state){ for (NetWorkObserver observer : observers) { observer.notifyNetStataChange(state); }}整个NetWorkManager的代码如下:
public class NetWorkManager {private static NetWorkManager mInstance = new NetWorkManager();private static ArrayList<NetWorkObserver> observers = new ArrayList<NetWorkObserver>();public static NetWorkManager getInstance(){ return mInstance;}public void registerNetWorkStateChangeListener(NetWorkObserver observer){ if (observers.contains(observer)) { return; } observers.add(observer);}public void unRegisterNetWorkStateChangeListener(NetWorkObserver observer){ if (observers.contains(observer)) { observers.remove(observer); }}public void unRegisterAllNetWorkStateChangeListener(){ observers.clear();}public void notifyNetWorkStateChange(int state){ for (NetWorkObserver observer : observers) { observer.notifyNetStataChange(state); }}}好了,整个观察者模式已经完成了,然后在监听网络变化的广播接收者里面调用这个notifyNetWorkStateChange方法
public class NetWorkStateChangeReciver extends BroadcastReceiver {private final String NET_CONN_CONNECTIVITY_CHANGE = "android.net.conn.CONNECTIVITY_CHANGE";private final int NET_NO_CONNECT = 0;private final int NET_WIFI_CONNECT = 1;private final int NET_MOBILE_CONNECT = 2; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (NET_CONN_CONNECTIVITY_CHANGE.equals(action)) { ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = conMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isAvailable()) { int type = networkInfo.getType(); if (type == ConnectivityManager.TYPE_WIFI) { NetWorkManager.getInstance().notifyNetWorkStateChange(NET_WIFI_CONNECT); } else if (type == ConnectivityManager.TYPE_MOBILE) { NetWorkManager.getInstance().notifyNetWorkStateChange(NET_MOBILE_CONNECT); } } else { NetWorkManager.getInstance().notifyNetWorkStateChange(NET_NO_CONNECT); } } }}这样,所有的观察者在网络发生变化的时候都会接收到通知。4.Android 中观察者模式应用android 中的广播就是一个观察者模式,能够轻易的完成跨进程和跨进程的通信。5.总结观察者模式适用于当一个对象的改变需要给变其它对象时,而且它不知道具体有多少个对象有待改变时情景,降低模块之间的耦合。
1 0
- Android之观察者模式
- Android 之 观察者模式
- Android开发之 --- 观察者模式
- Android|观察者模式之EventBus
- Android 设计模式 之 观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式之观察者模式
- Android 设计模式 之 观察者模式
- android 中的设计模式 之 观察者模式
- Android 设计模式 之 观察者模式
- android设计模式之观察者模式
- Android 设计模式之观察者模式
- Android 设计模式之观察者模式
- android设计模式之观察者模式详解
- android设计模式之--观察者模式
- Android 设计模式 之 观察者模式
- Android 设计模式 之 观察者模式详解
- Android设计模式之观察者模式
- 【C语言提高38】结构体套一级指针
- 【C语言提高40】结构体套一级指针和二级指针
- jsp--自定义标签模仿forEach
- 从产品经理的境界谈创业
- 第一次使用Android Studio时你应该知道的一切配置(2)
- Android 之 观察者模式
- Project Tango tablet development kit
- 第一次使用Android Studio时你应该知道的一切配置(3)
- 文章标题
- Bash shell编程<五>:while命令、until命令
- windows下多线程同步及互斥代码,并且加入了守卫(自动锁)
- ubuntu14.04安装clang
- Mac用CornerStone配置SVN,HTTP及svn简单使用说明
- 摘花生 http://bailian.openjudge.cn/summeracm2014final/L/