代理和动态代理模式之间的差异

Sha*_*ski 6 java design-patterns dynamic-proxy proxy-pattern

我试图了解代理和动态代理模式之间的区别.从我到目前为止所读到的,我发现的唯一事情是代理类字节代码是在编译期间创建的,而动态代理是在运行时创建的.我还缺少另一个差异吗?如果不是那么更喜欢代理而不是动态代理的原因是什么(性能问题除外)

小智 12

动态代理本质上是代理设计模式,其中代理对象是在运行时动态创建的.

代理设计模式使用代理,它充当客户端和底层真实对象之间的中介.在将请求委托给真实对象之前,程序员可以在代理中执行访问控制,验证和附加操作.

现在假设您要执行一些通用操作beform调用任何类的任何方法,例如,您希望保留客户端进行的所有方法调用的日志.在这种情况下,如果要实现代理设计模式,步骤如下:

  1. 为每个类创建代理类.
  2. 以某种方式实现代理类,首先它创建客户端进行方法调用的日志条目,而不是将调用委托给真实对象.

上述技术的问题是,假设你有1000个类,你需要为每个类编写1000个代理类,并在所有类中实现所有基本上做同样事情的方法(在我们的例子中执行日志记录操作),这是一个非常乏味的过程和记忆的浪费.

如果在运行时,我们能够基于客户端的调用创建代理对象,然后在将调用委托给真实对象之前执行泛型操作(在我们的例子中记录操作),那么它会不会更好,那就是什么dyanmic代理人.

动态代理的过程如下:

  1. 客户端对某个对象调用一些操作.
  2. system根据客户端的调用在运行时创建代理对象.
  3. 代理对象调用通用方法,以便在每次调用时执行通用操作.
  4. 在动作之后,代理对象委托对真实对象的调用.

所以简而言之,如果你要执行一些通用操作,请使用动态代理,但如果你希望每个类都被区别对待(在某些类中执行日志记录,在某些类中没有,在某些访问控制中等)使用简单代理.希望我帮忙.如果您需要代码示例,请告诉我.