[设计模式]NetworkManagementService中的观察者模式
观察者模式
观察者模式有如下角色
(1)被观察者(Subject)
(2)观察者(Observer)
public class Subject{
private:
list<Observer> mObservers;
protect:
void onChange(){
for(int i=0; i<mObservers.size(); ++i){
mObservers.get(i).onAction();
}
}
public:
void attach(Observer m){
mObservers.add(m);
}
void detach(Observer m){
mObservers.remove(m);
}
}; public class Observer{
public:
virtual void onAction();
}; public ConcreteSubject extends Subject {
private:
int content = 0;
public:
void updateContent(int n){
content = n;
onChange();
} int getContent(){ return content; }
}; public ConcreteObserver extends Observer{
private:
ConcreteSubject mConreteSubject;
public:
ConcreteObserver(ConcreteSubject subject){ mConcreteSubject = subject; }
void onAction(){
int content = mConcreteSubject.getcontent();
}
};
如下为NetworkManagementService中的注册观察者的函数(regisrterObserver)和通知观察者的函数(notifyInterfaceStatusChanged),其实在NetworkManagementService中还有很多类型的通知函数,通知变动的内容如下:
InterfaceStatus
InterfaceLinkState
InterfaceAdded
InterfaceRemoved
LimitReached
InterfaceClassActivity
在NetworkManagementService中观察者是INetworkManagementEventObserver类型,在INetworkManagementEventObserver.aidl
NetworkManagementService中的观察者模式则更为简单,如下:
观察者与被观察者的子类之间没有相互依赖关系。如果加上mDataActivityObserver 的幕后操纵者ConnectivityService,结构如下:
其实在ConnectivityService中除了mDataActivityObserver作为观察者,还有mTethering也作为观察者注册到NetworkManagemanetService中。
此外除了ConnectivityService还有NetworkPolicyManagerService也有向NetworkMangementService派遣观察者。这种设计真的太妙了。
(版权所有,转载请告知)
[设计模式]NetworkManagementService中的观察者模式的更多相关文章
- Android开发中常见的设计模式(三)——观察者模式
先看下这个模式的定义. 定义对象间的一种一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新 先来讲几个情景. 情景1:有一种短信服务,比如天气预报服务,一旦你订阅 ...
- 最熟悉的陌生人:ListView 中的观察者模式
RecyclerView 得宠之前,ListView 可以说是我们用的最多的组件.之前一直没有好好看看它的源码,知其然不知其所以然. 今天我们来窥一窥 ListView 中的观察者模式. 不熟悉观察者 ...
- C#设计模式之3:观察者模式
C#中已经实现了观察者模式,那就是事件,事件封装了委托,使得委托的封装性更好,在类的内部定义事件,然后在客户端对事件进行注册: public class Subject { public event ...
- Java设计模式(20)观察者模式(Observer模式)
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
- java设计模式解析(1) Observer观察者模式
设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...
- jQuery中的观察者模式(Observer Pattern)
在jQuery中,on方法可以为元素绑定事件,trigger方法可以手动触发事件,围绕这2个方法,我们来体验jQuery中的观察者模式(Observer Pattern). ■ on方法绑定内置事件, ...
- AE Scene开发中的观察者模式
AE SceneGraph中的观察者模式 注意SceneControl不是观察者,它只是一个SceneGraph的拥有者:SceneViewer才是观察者,SceneGraph是被观察对象,同时观察者 ...
- php设计模式课程---4、观察者模式的好处是什么
php设计模式课程---4.观察者模式的好处是什么 一.总结 一句话总结: 方便选择之后去控制监听的板块数:比如选择男士之后,我可以决定监听广告里面的第二和第三板块. 1.为什么有观察者模式? 错误理 ...
- Spring 中的观察者模式
一.Spring 中观察者模式的四个角色 1. 事件(ApplicationEvent) ApplicationEvent 是所有事件对象的父类.ApplicationEvent 继承自 jdk 的 ...
随机推荐
- alternatives命令使用方法
alternatives命令使用方法 alternatives是Linux下的一个功能强大的命令.仅仅能在root权限下运行.如系统中有几个命令功能十分相似,却又不能任意删除,那么能够用 altern ...
- Delphi 多文件拖放获取路径示例
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...
- oracle internal :VIEW: X$KCBLDRHIST - Direct Read HISTory
WebIV:View NOTE:159900.1 Note (Sure) - Note Mods - Note Refs Error ORA 600 TAR TAR-Info Bug B ...
- CSS skills: 6) auto hide the top bar javascript
//jquery $(document).ready(function(){ $(window).scroll(function() { $(this).scrollTop() > 10 ? $ ...
- [转]Oracle 多行的数据合并
本文转自:http://www.2cto.com/database/201203/125287.html Oracle合并行范例 现有如下数据 id name 1 a1 2 a2 3 a3 1 b ...
- [改善Java代码]多种最值算法,适时选择
建议64:多种最值算法,适时选择. 对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构知识.在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现.下面以求最 ...
- HTML5和Web Apps框架和方法
单页: 1jQuery Mobile 该框架以其基于AJAX的导航系统和可使用主题的ThemeRoller设计而闻名.支持Android,ios,Windows Phone,webOs等.编程模式为C ...
- android手机操作SD的使用方法
写入SD卡 package com.example.openfileproject; import java.io.File; import java.io.FileInputStream; impo ...
- Mac电脑svn使用经验,Mac电脑使用android studio使用经验
1.先查看mac本身是否自带java1.6 没有去appstore里面安装 2.http://www.android-studio.org/ 下载mac版的ide 3.安装完成ide后,打开and ...
- 百度手机号码归属地查询api与返回json处理
前天无意间在网上看到百度ApiStore,然后好奇就进去看了看.正好最近在某博培训Android,刚学到java基础.抱着锻炼的心态选择手机号码归属地查询api进行练手.api地址 (http://a ...