美文网首页Android技术知识Android知识Android开发
每日Android源码设计模式之-17、代理模式

每日Android源码设计模式之-17、代理模式

作者: Alexey | 来源:发表于2017-04-05 07:58 被阅读0次

代理模式是一个结构型设计模式。Proxy Pattren也叫委托模式。


定义:

为其他对象提供一种代理以控制对这个对象的访问。


场景:

当不想直接访问一个对象或者无法访问时,可以使用代理对象来访问,为了客户端使用的透明性,委托对象和代理对象要实现相同的接口。


实现:

原理很简单,就是代理类持有委托类的引用,客户端调用代理类的proxy.methodA()方法,而实际上在代理类的methodA()方法中,调用了委托类的realSubject.methodA方法。

代理分两种:1.静态代理。2.动态代理

静态代理是在编程的时候我们就决定了代理类。

动态代理是通过反射机制来在运行的时候动态的生成代理者对象。

java中为我们提供了一个便捷的动态代理接口InvocationHandler。

我们创建一个DynamicProxy实现InvocationHandler接口

需要复写invoke方法,方法里面调用 return metod.invoke(obj,args),obj是被代理的引用,是在构造函数中传入的,成员变量持有引用。

客户端这样做:

1.创建一个RealSubject real对象

2.构造动态代理:dynamicProxy = newDynamicProxy(real)

3.冬天构造代理者  IProxy proxy =  (IProxy)Proxy.newProxyInstance(loader,new Class[] {IProxy.class},dynamicProxy)

其中IProxy使我们自己创建的和real对象行为相同的代理类接口。

loader是real类通过getClass.getClassLoader获取的。


Android源码中的应用

ActtivityManagerProxy代理类,它代理的是ActivityManagerNative的子类ActivityManagerService类。

ActivityManagerService类是运行在独立进程中的是系统级别的Service,我们并不能直接使用,这时候就要通过ActtivityManagerProxy来访问,这里其实是一个远程代理,是跨进程,通过Binder机制来通讯的。

相关文章

网友评论

    本文标题:每日Android源码设计模式之-17、代理模式

    本文链接:https://www.haomeiwen.com/subject/guktattx.html