设计模式总结(一):代理模式

1、代理模式的概念和分类

为其他对象提供一种代理,以控制这个对象的访问,代理模式分为虚拟代理、智能引用代理、远程代理、保护代理

2、常用代理模式的原理(实现)

静态代理

静态代理和被代理对象在代理之前是确定的。他们实现相同的借口或者继承相同的抽象类。
实现方法:
继承方法: 代理类继承被代理类 在实现额方法前后增加代理操作。super.method();
聚合方法: 代理类和被代理类都实现同一个接口,代理类写构造器传入被代理类的实例
调用被代理类的方法,被代理类.method();在其前后加入代理操作。

使用聚合的方式更加适合代理模式:
当代理的操作有多个的时候 如权限、日志、时间等以及他们的代理顺序发生变化的时候。只需要在此代理类中传入上一个代理
类的实例对象即可,而不是像继承那样需要建立很多的代理类。

JDK动态代理

动态代理相比较静态代理避免了开发人员编写各个繁琐的代理类,只需要简单地指定一组接口以及目标类对象就可以获得代理对象
步骤:
①创建一个实现接口invocationhandle的类,实现其invoke方法,传入被代理的对象、其方法、方法的参数,并且加入代理
通知的操作(target为构造器传入的被代理对象)
设计模式总结(一):代理模式

② 创建被代理的类以及接口
③ 调用Prroxy的静态方法Proxy.newProxyInstance(),动态的创建一个代理类。
④ 调用代理类的方法

设计模式总结(一):代理模式

使用cglib动态产生代理

与JDK动态代理的区别:jdk只能代理实现接口的类 。cglib针对类来实现代理,针对目标类产生一个子类, 通过方法拦截技术拦截所有的父类方法的调用。
实现:
设计模式总结(一):代理模式
设计模式总结(一):代理模式

设计模式总结(一):代理模式