动态代理模式的相关细节描述

忘是亡心i 2022-08-27 00:30 225阅读 0赞
  1. public interface House//动态代理模式必须使用接口,需要注意
  2. {
  3. public void findHouse();
  4. }
  5. public class EmployeeWish implements House
  6. {
  7. public void findHouse()//真实对象实现接口中方法
  8. {
  9. System.out.println("Where to find the house?");
  10. }
  11. }
  12. import java.lang.reflect.*;
  13. public class Helper implements InvocationHandler//代理角色必须实现InvocationHandler接口中的invoke方法
  14. {
  15. private Object obj;//接收类型为object类型,多态的使用,使得动态代理模式可以进行多种类型的代理,没有局限性
  16. public Helper(Object obj)
  17. {
  18. this.obj=obj;
  19. }
  20. @Override
  21. public Object invoke(Object proxy, Method method, Object[] args)//接收参数自动从代理实例所调用的方法中加载,有底层去实现,无需过分操心!
  22. throws Throwable
  23. {
  24. Object object=method.invoke(obj, args);//通过接收的方法,使用反射调用真实对象中的方法
  25. return obj;
  26. }
  27. }
  28. import java.lang.reflect.*;
  29. public class Test
  30. {
  31. public static void main(String args[])
  32. {
  33. EmployeeWish employee=new EmployeeWish();
  34. Class<?> classType=employee.getClass();
  35. Helper help=new Helper(employee);//注意使用Proxy的静态方法生成代理实例时的接收参数
  36. House house=(House)Proxy.newProxyInstance(classType.getClassLoader(),classType.getInterfaces(), help);
  37. //由于静态方法接收参数种知道了对象所实现的接口,因而该代理实例也实现了这些接口,使用多态可将其类型转换为接口类型!
  38. house.findHouse();//通过代理实例调用方法时,会自动转移到代理对象中的invoke方法
  39. }
  40. }

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java--代理模式动态代理

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实

    相关 动态代理模式

    代理模式: 概念:用一个代理类去代表另一个实体类的功能,让调用类去访问代理类。 解决问题:在直接访问对象时带来的问题,比如 要访问的对象在远程机器上。 应用实例:1

    相关 动态代理模式

    > 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象