java ------ 代理

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 }

猜你喜欢

转载自www.cnblogs.com/pl12138/p/11744434.html