设计模式--代理模式
来源:互联网 发布:外国人来中国知乎 编辑:程序博客网 时间:2024/06/06 07:39
概念:为其他对象提供一种代理,以控制对这个对象的访问(火车票代售处)类似中介,去掉一些服务或者增加一些功能
AOP:再不改变原有类的一些方法的基础上,增加一些额外的业务逻辑
代理模式的几种:
1.远程代理:为不同地理的对象提供局域网代表对象
2.虚拟代理:根据需要将资源消耗很大的对象进行延迟,真正需要的时候进行创建(加载今日头条时,文字先加载出来,图片过大而加载缓慢,会出现一个虚拟图片)
3.保护代理:控制用户的访问权限(只有注册了才能发帖,评论等)
4.智能引用代理:提供对目标对象额外服务
代理实现的两种方式:
静态代理:(使用聚合方式)
代理和被代理对象在代理之前时确定的,他们都实现相同的接口或者都继承相同的抽象类
动态代理:动态产生代理,实现对不同类,不同方法的代理
使用动态代理,必须实现InvocationHandle接口
InvocationHandle是事务处理器
代码:
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * Created by lxq on 2017/9/4. */public class TimeHandle implements InvocationHandler{ private Object object; public TimeHandle(Object object) { super(); this.object = object; } /** * * @param proxy 被代理对象 * @param method 被代理对象的方法 * @param args 方法的参数 * @return * @throws Throwable */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { /* 处理业务的逻辑 */ method.invoke(object);//传递过来的对象 /* 处理业务的逻辑 */ return null; }}
测试代码:
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;/** * Created by lxq on 2017/9/4. */public class Test1 { public static void main(String[] args){ // Car car = new Car(); Object object = new Object(); Class<?> cls = object.getClass(); InvocationHandler h = new TimeHandle(object); /** * @param loader 被代理类的类加载器 * @param interfaces 实现接口 * @param h InvocationHandle */ //Moveable moveable = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),h); //moveable.move(); }}
JDK动态代理和CGLIB代理的区别:
1.jdk动态代理只能代理实现了接口的类,没有实现接口的类不能实现JDK的动态代理
2.CGLIB是针对类来实现代理的:对制定目标类产生子类(通过继承方式final),通过对方法的重写
阅读全文
0 0
- 设计模式--【代理模式】
- 设计模式:代理模式
- 设计模式--代理模式
- 设计模式---代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式 代理模式
- 设计模式-【代理模式】
- 设计模式-代理模式
- 设计模式----代理模式
- 设计模式-代理模式
- 设计模式---代理模式
- 设计模式--代理模式
- 设计模式-代理模式
- 设计模式- 代理模式
- 设计模式---代理模式
- 设计模式 - 代理模式
- 【设计模式】代理模式
- 《有毒有害气体》学习
- docker 部署应用
- 京东2016招聘笔试题<分苹果>Java代码
- ESP8266如何烧写程序(noboot版本)
- Python初级项目记
- 设计模式--代理模式
- C语言实现的线程池
- HDFS特点(优缺点)
- spring定时器触发时间表达式规则
- 混合拉普拉斯
- LDA主题模型代码实现流程
- 尝试在C++里实现 Java 的 synchronized 关键字
- webpack代码分割-使用require.ensure
- Uncaught TypeError: Cannot read property 'getItem' of null