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