1.代理模式的三大要素
代理这种模式在我们生活中并不少见,向黄牛代购票,医院戴挂号,甚至经纪人,律师等等职业都是代理
但是不管是哪种代理,其实都是离不开三大要素的
a.被代理人 b.代理的事务 c.代理人
2.java中的代理
抽象到java中,就有两个对象(代理人和被代理人)以及一个接口方法(代理的事务)而已
代码举例:
首先,创建一个代理对象ProxyDemo
1 package com.pl.demo; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 6 /** 7 * @AutLhor: Mr.P 8 * @Date: 2019/10/26 9 * @Time: 11:30 10 */ 11 public class ProxyDemo implements InvocationHandler { 12 private Object object;//被代理的真实角色,持有一个被代理的对象 13 14 public ProxyDemo(Object object) { 15 this.object = object; 16 } 17 //第二个参数是被代理对象实现的借口方法,第三参数是被代理对象的接口方法的参数 18 @Override 19 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 20 System.out.println("前置操作"); 21 for(Object object:args){ 22 System.out.println(object); 23 } 24 Object invoke = method.invoke(object,args); 25 System.out.println("后置操作"); 26 return invoke; 27 } 28 } 29
其次,创建一个被代理对象
1 List client = new ArrayList();//接口中定义了需要代理的方法,步骤一:生成被代理对象, 步骤二:讲被代理对象传递给代理对象 步骤三:代理对象完成代理方法
最后,创建一个接口
为了简便操作,这里接口直接使用java的List接口了
1 public class Client { 2 public static void main(String[] args){ 3 List client = new ArrayList();//接口中定义了需要代理的方法,步骤一:生成被代理对象, 步骤二:讲被代理对象传递给代理对象 步骤三:代理对象完成代理方法 4 List proxy =(List)Proxy.newProxyInstance(client.getClass().getClassLoader(),client.getClass().getInterfaces(),new ProxyDemo(client));//第一个参数是获得被代理对象的类加载器,第二个参数是获得被代理对象的索引接口,第三个参数自定义的代理对象 5 proxy.add("张三"); 6 } 7 }
原文:https://www.cnblogs.com/pl12138/p/11744434.html