proxy与stub设计模式

Proxy类将特殊性接口转换到通用性接口,而Stub类则将通用性接口转为特殊性接口,实现接口设计灵活性与复用性的提升。

proxy与stub在接口设计中的应用:

Proxy类将特殊性接口转换到通用性接口

Stub类将通用性接口转为特殊性接口

待理解透再补充...

### 代理(Proxy桩(Stub)的概念及作用 在分布式系统或远程过程调用(RPC)中,代理(Proxy)和桩(Stub)是两个重要的概念,它们分别在客户端和服务端扮演关键角色。 #### 1. 代理(Proxy) 代理是一种设计模式,用于在客户端屏蔽远程方法调用的复杂性。在 RPC 中,代理的主要作用是模拟本地方法调用的行为,将用户的请求封装并发送到远程服务端。代理会隐藏底层的网络通信细节,使得开发者可以像调用本地方法一样调用远程服务[^2]。 - **功能**:代理负责接收客户端的调用请求,将请求参数序列化后通过网络传输给服务端,并等待服务端返回结果。最后,代理将结果反序列化并返回给客户端。 - **实现方式**:通常使用动态代理技术来生成代理对象。例如,在 Java 中可以通过 `java.lang.reflect.Proxy` 类动态生成代理实例[^2]。 ```java // 动态代理示例 public class RpcProxy { public static <T> T getProxy(Class<T> clazz, String host, int port) { return (T) Proxy.newProxyInstance( clazz.getClassLoader(), new Class<?>[] { clazz }, (proxy, method, args) -> { // 序列化参数并通过网络发送 Object result = sendRequest(host, port, method.getName(), args); return result; } ); } } ``` #### 2. 桩(Stub) 桩(Stub)是代理在服务端的对应部分,也被称为“服务器桩”。它的主要职责是接收来自客户端的请求,将请求参数反序列化后调用实际的服务逻辑,并将结果序列化后返回给客户端[^1]。 - **功能**:桩的作用类似于服务端的入口点,它负责处理网络通信、参数解析和结果封装。桩的存在使得服务端无需直接暴露其内部实现细节。 - **实现方式**:桩通常由框架自动生成,开发者只需关注业务逻辑的实现。例如,在 Dubbo 等 RPC 框架中,桩是由框架根据接口定义自动生成的。 ```java // Stub 示例 public class RpcStub implements InvocationHandler { private final Object service; public RpcStub(Object service) { this.service = service; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 调用实际的服务逻辑 Object result = method.invoke(service, args); return result; } } ``` --- ### 代理(Proxy桩(Stub)的区别 | **对比维度** | **代理(Proxy)** | **桩(Stub)** | |-------------------|-----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------| | **位置** | 运行在客户端,作为服务的本地代表 | 运行在服务端,作为客户端请求的入口点 | | **主要功能** | 接收客户端调用,序列化参数并通过网络发送给服务端;接收服务端返回的结果并反序列化 | 接收客户端请求,反序列化参数并调用实际的服务逻辑;将结果序列化后返回给客户端 | | **透明性** | 对开发者透明,使远程调用看起来像本地调用 | 对开发者透明,隐藏了服务端的具体实现细节 | | **生成方式** | 通常通过动态代理技术生成 | 通常由框架根据接口定义自动生成 | --- ### 总结 代理(Proxy)和桩(Stub)是 RPC 实现中的两个核心组件。代理在客户端负责封装远程调用的复杂性,而桩在服务端负责解析请求并调用实际的服务逻辑。两者共同协作,实现了远程方法调用的透明性和高效性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值