ToB企服应用市场:ToB评测及商务社交产业平台

标题: 代理模式 - 动态代理 [打印本页]

作者: 魏晓东    时间: 2024-9-23 15:55
标题: 代理模式 - 动态代理
动态代理的API


Proxy 动态代理类

InvocationHandler 处理器接口

动态代理的角色分析


动态代理的模板代码
  1. // 动态代理公式
  2. // T t=(T)Proxy.newProxyInstance(类加载器,接口数组,处理器);
  3. T t=(T)Proxy.newProxyInstance(
  4.                 被代理对象.getClass().getClassLoader(),
  5.                 被代理对象.getClass().getInterfaces();
  6.                 (Object obj, Method method, Object[] args)->{
  7.                       //方法执行前
  8.                      
  9.                       Object result = method.invoke(代理对象,args);
  10.                      
  11.                       //方法执行后
  12.       
  13.                       return result;
  14.                  }
  15. );
  16. t.接口的方法() ;
复制代码
应用实例

调用List聚集remove( )时,删除指定的元素(包含重复的元素)
  1. public static void main(String[] args1) {
  2.     //需求:调用List集合remove()时,删除指定的元素,包含多个重复的元素
  3.     //1.创建被代理对象
  4.     List list = new ArrayList();
  5.     Collections.addAll(list, 2, 3, 5, 2, 7, 2, 9,5, 6);
  6.     System.out.println("调用方法前:"+list);
  7.     //2.通过Proxy类 创建代理对象
  8.     List listProxy=(List) Proxy.newProxyInstance(
  9.             list.getClass().getClassLoader(),
  10.             list.getClass().getInterfaces(),
  11.             (Object obj, Method method, Object[] args)->{
  12.                 Object invoke = null;//目标方法的返回值,如果没有,则不需要写
  13.                 if("remove".equals(method.getName())){
  14.                     //调用remove方法时,删除所有指定的重复元素
  15.                     while(true){
  16.                         if (!list.contains(args[0])) {
  17.                             break;
  18.                         }
  19.                         list.remove(args[0]);
  20.                     }
  21.                 }else{
  22.                     //其它方法,正常执行
  23.                     invoke = method.invoke(list, args);
  24.                 }
  25.                 return invoke;
  26.             }
  27.     );
  28.     //3.代理对象调用方法
  29.     listProxy.remove(2);
  30.     System.out.println("调用方法后:"+list);
  31. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4