美文网首页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