1.1代理模式介绍
代理模式也称为委托模式
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之间通讯必须通过跨进程进行通信。