何时使用"动态代理类"或者"标准代理"图案?

时间:2016-02-08 21:39:02

标签: java design-patterns dynamic-proxy proxy-pattern

为什么要使用"动态代理类"而不是"标准代理"图案?

两者的缺点或优点是什么?

看起来它们都有相同的最终结果,除了它们的实现方式不同。

动态代理类 https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

  

动态代理类是实现接口列表的类   在运行时指定,以便通过其中一个方法调用   将对类的实例上的接口进行编码和分派   通过统一的界面到另一个对象。因此,一个动态代理   class可用于为列表创建类型安全的代理对象   接口,无需预先生成代理类,例如   与编译时工具一样。对一个实例的方法调用   动态代理类被调度到一个方法中   实例的调用处理程序,它们用a编码   标识方法的java.lang.reflect.Method对象   调用和包含参数的Object类型数组。

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

  

代理,最常见的形式,是一个充当的类   接触其他东西。代理可以与任何东西连接:a   网络连接,内存中的大对象,文件或其他   资源昂贵或无法复制。简而言之,一个   proxy是客户端调用的包装器或代理对象   在幕后访问真实的服务对象。在代理中   可以提供额外的功能,例如缓存时   对真实对象的操作是资源密集型或检查   调用真实对象上的操作之前的前提条件。对于   客户端,代理对象的使用类似于使用真实的   object,因为它们都实现了相同的接口。

1 个答案:

答案 0 :(得分:1)

您似乎回答了自己的问题。您应该使用更容易实现的用例。

如果在编译时没有为每个方法实现,则需要动态代理。

例如,模拟测试库使用动态代理,以便可以编写代码来一般地处理任何方法。