Android 代理模式讲解
2016-05-13 09:34
543 查看
1.1代理模式介绍
代理模式也称为委托模式
1.2代理模式的定义
为其他对象提供一种代理以控制改对这个对象的访问
1.3代理对象的使用场景
当无法或不想直接访问某一个对象的时候或者直接访问一个对象存在困难的时候,可以通过一个代理对象来间接访问,以保证客户端的透明性,委托对象与代理对象需要实现相同的接口
1.4代理模式的简单UML类图
具体代码如下
1.5 接下来我们分析下Android 源代码中使用的代理模式
我们发现ActivityManagerNative 和 ActivityManagerProxy都继承IActivityManager接口,而ActivityManagerService 继承于ActivityManagerNative,我们通过调用ActivityManagerProxy来引用ActivityManagerService.
备注:理解注意点
1)ActivityManagerNative 和 ActivityManagerProxy都实现了IActivityManager接口。
2)ActivityManagerNative由其子类ActivityManagerService具体实现。
3)ActivityManagerService是系统级Service并且运行与独立进程空间中,可以通过ServiceManager来获取它,而ActivityManagerProxy也运行在自己所处的进程中,两者不相同,因此ActivityManagerProxy和ActivityManagerService之间通讯必须通过跨进程进行通信。
代理模式也称为委托模式
1.2代理模式的定义
为其他对象提供一种代理以控制改对这个对象的访问
1.3代理对象的使用场景
当无法或不想直接访问某一个对象的时候或者直接访问一个对象存在困难的时候,可以通过一个代理对象来间接访问,以保证客户端的透明性,委托对象与代理对象需要实现相同的接口
1.4代理模式的简单UML类图
具体代码如下
package com.android.proxy; public interface Subject { void visit(); }
package com.android.proxy; public class SubjectNative implements Subject{ public void visit() { // TODO Auto-generated method stub System.out.println("Welcome visit"); } }
package com.android.proxy; public class SubjectProxy implements Subject{ private SubjectNative subjectNative;//持有真正主题的使用 public SubjectProxy(SubjectNative subjectNative) { this.subjectNative = subjectNative; } public void visit() { // TODO Auto-generated method stub subjectNative.visit(); } }
package com.android.proxy; public class Client { public static void main(String[] args) { //构造一个真实的主题 SubjectNative subjectNative = new SubjectNative(); //通过真实的主题创建一个代理主题 SubjectProxy subjectProxy = new SubjectProxy(subjectNative); //调用代理的相关方法 subjectProxy.visit(); } }
1.5 接下来我们分析下Android 源代码中使用的代理模式
我们发现ActivityManagerNative 和 ActivityManagerProxy都继承IActivityManager接口,而ActivityManagerService 继承于ActivityManagerNative,我们通过调用ActivityManagerProxy来引用ActivityManagerService.
备注:理解注意点
1)ActivityManagerNative 和 ActivityManagerProxy都实现了IActivityManager接口。
2)ActivityManagerNative由其子类ActivityManagerService具体实现。
3)ActivityManagerService是系统级Service并且运行与独立进程空间中,可以通过ServiceManager来获取它,而ActivityManagerProxy也运行在自己所处的进程中,两者不相同,因此ActivityManagerProxy和ActivityManagerService之间通讯必须通过跨进程进行通信。
相关文章推荐
- Android studio 代码补全修改以及切换到熟悉的eclipse上
- android 属性动画初识(三)
- android隐藏以及显示软键盘以及不自动弹出键盘的方法
- Android 开发技术流程
- android反编译、修改代码、打包
- android 属性动画初识(二)
- android 属性动画初识(-)
- Android 平滑图片加载和缓存库 Glide 使用详解
- Andriod 布局过度绘制优化
- Android Studio相关
- Android中XLIFF的使用
- Android TextUtils类介绍
- Android TextUtils类介绍
- android MSM8974 上DeviceTree简介
- android开发 dts、各种接口porting
- Android开发学习:[5]Android Studio显示行号
- Android Studio安装genymotion插件
- 关于Android v7包的资源文件错误问题解决方案
- 学习Android自定义Spinner适配器
- android 之讯飞语音接入的输出(2)