何时使用“动态代理类”或“标准代理”模式?

4
为什么应该使用“动态代理类”而不是“标准代理”模式?两者的优缺点是什么?它们似乎都有相同的结果,只是实现方式不同。
动态代理类是一种在运行时实现指定接口列表的类,因此对类实例的接口之一进行的方法调用将通过统一接口编码和分派到另一个对象。因此,动态代理类可用于创建类型安全的代理对象,而无需预先生成代理类,例如使用编译时工具。动态代理类实例上的方法调用将被分派到实例的调用处理程序中的单个方法,并且它们使用标识已调用的方法的java.lang.reflect.Method对象和包含参数的Object类型数组进行编码。 https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

标准代理模式 https://en.wikipedia.org/wiki/Proxy_pattern

代理是一种最常见的类,作为与其他东西交互的接口。代理可以与任何东西进行交互:网络连接、内存中的大对象、文件或其他昂贵或无法复制的资源。简而言之,代理是一个包装器或代理对象,由客户端调用以访问幕后的真实服务对象。在代理中可以提供额外的功能,例如在真实对象上执行操作时进行缓存,或在调用真实对象上的操作之前检查先决条件。对于客户端,使用代理对象与使用真实对象类似,因为两者都实现了相同的接口。

1个回答

2

你似乎已经回答了自己的问题。你应该使用对于你的用例更易实现的那个。

当你在编译时没有每个方法的实现时,你需要使用动态代理。

例如,模拟测试库使用动态代理,这样可以编写处理任何方法的通用代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接