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

代理模式是一个结构型设计模式。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机制来通讯的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容