美文网首页
代理模式二

代理模式二

作者: 三流之路 | 来源:发表于2022-09-29 09:49 被阅读0次

远程代理

《Head First 设计模式》中讲,怎么毫无印象啊,再去看一遍,用 Java 内置的 RMI 举例,当年肯定是因为过于复杂难懂放弃了。现在看,第一反应是 Android 通过 AIDL 那一套的 Binder 机制,应该就是这个东西。

C/S 架构中,Client 不好直接调用 Server,Client 端有个辅助对象叫 Stub(桩),服务端有个辅助对象叫 Skeleton(骨架)。

书里大致流程应该是:

  1. Server 生成 Skeleton,Stub
  2. Server 向一个中间的桥梁 Registry 中注册绑定那个 Stub
  3. Client 从 Registry 找到对应 Stub
  4. Client 调用方法序列化后,通过 Stub 传到了 Skeleton,Skeleton 反序列化后调用 Server
  5. 返回结果再从 Skeleton 传给 Stub,进而到了 Client。

在 Android 里,创建 AIDL 文件,会自动生成一个类,这个类其实就是相当于服务端同时生成了 Stub 和 Skeleton。

内部生成子类 Stub,继承自 Binder,感觉它应该就是服务端的 Skeleton。

Stub.asInterface 方法中,当没有跨进程的时候,就是把这个 Stub 给客户端,相当于并不是什么远程调用,不需要做代理,但从架构来说,还是按需要远程调用的那一套来,这样保持统一;当需要跨进程时,返回 Stub 的代理 Proxy 给客户端,就相当于 Client 从 Registry 中查找到对应的 Stub。

代理类 Proxy 中定义了要调用的远程方法,就是将一些信息序列化通过 transact 方法传到服务端的 Stub 类,服务端在 onTransact 中接收到,反序列化,真正调用服务端的方法。返回值放到 _reply,这是一个序列化的对象,然后 Proxy 再从 _reply 把结果取出来。

当客户端 bindService 时,找到了桥梁 Binder,然后调用它的 asInterface,相当于从 Registry 中找到对应的 Stub 代理。

相关文章

  • 代理模式

    一、代理模式介绍 二、代理模式代码实例

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 09.代理模式和装饰模式的区别

    代理模式和装饰模式 代理模式UML代理模式类图 装饰模式UML装饰模式类图从类图来看,二者除了名称不同,几乎没有差...

  • Java动态代理

    一,简介 在将动态代理之前,先按照我自己的理解来讲讲代理模式,和静态代理 二,代理模式 我们常常说代理模式是一种j...

  • Android代理模式基础讲解

    一、代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。 二、静态代理 静态代理的代理类持有被...

  • 代理模式(Proxy)

    代理模式和装饰模式非常类似,甚至代码都类似。二者最主要的区别是:代理模式中,代理类对被代理的对象有控制权,决定其执...

  • 代理模式

    一、代理模式 二、虚代理 三、智能代理 智能指针的使用,自动析构——

  • 代理模式(二)

    延续代理模式(一)的内容 (2)、cglib动态代理原理() JDK动态生成一个实现代理动作接口的代理对象,最后强...

  • 代理模式二

    远程代理 《Head First 设计模式》中讲,怎么毫无印象啊,再去看一遍,用 Java 内置的 RMI 举例,...

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

网友评论

      本文标题:代理模式二

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