Stub模式释疑

Overview

结论

  • Stub 跟 Proxy 是一对,俗称“代理-桩” (或代理-存根),一般用在远程方法调用。
  • Proxy 相当于是拿在手里的遥控器,而 Stub 相当于长在电视机里的遥控接收器,它们有着一一对应的接口方法,但操作的方向刚好相反。
  • Proxy 的接口供客户端程序调用,然后它内部会把信息包装好,以某种方式(比如 RMI)传递给 Stub,而后者通过对应的接口作用于服务端系统,从而完成了“远程调用”。
  • 一般不同进程间通信的时候都会用到这种模式(C/S或对接第三方)。

举例

img

客户端访问服务端的某个方法fn(),并非是由客户物件直接访问服务物件,而是客户端生成一个代理函数client_proxy_fn(),

通过代理函数来访问服务端;

同时,客户端代理函数也并不是直接访问服务端函数fn(),因为服务端也会生成一个桩函数 server-stub_fn(),由桩函数来承接来自客户端的远程请求。

从架构设计上来讲,此模式的引入,要么是为了隔离变化; 要么是为了降低耦合性(或者提高内聚

实际场景-android ipc方式aidl就用到了这种方式

AIDL属于Android的IPC机制,常用于跨进程通信,主要实现原理基于底层Binder机制。

img

参考

stub模式

一个stub模式例子