目录
在了解动态代理之前。我们先了解一下静态代理。
静态代理
某一个对象提供了一个代理,代理角色固定,以控制对这个对象的访问,代理类和委托类有共同的父类接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理,过滤,将请求分派给委托类处理,以及委托类执行完成请求后的后续处理。
简单理解来说,你们是一对准备新婚的恋人,你们想把婚礼布置的更加美满一点,怎么布置你不需要管。交给婚庆公司去管理,婚庆公司给给你们安排婚礼前后的布置。
这么理解来你就是目标角色,婚前公司就是代理角色,你们有一个共同的目标,那就是完美进行婚礼。
代理的三要素
1.有共同的行为(结婚) -定义接口
2.目标角色/真实角色(新人) -实现接口
3.代理角色(婚庆公司) -实现接口 增强用户行为
咱们简单实现一下
先实现一个接口(共同的行为):
package org.example.proxy;
/*
* 定义用户的行为
* */
public interface Marry {
public void toMarry();
}
定义一个目标角色类:
package org.example.proxy;
/*
* 静态代理--目标角色
* 实现行为
* */
public class You implements Marry{
@Override
public void toMarry() {
System.out.println("结婚");
}
}
定义一个代理角色类
package org.example.proxy;
/*
* 静态代理 代理角色
* 1。实现行为
* 2.增强用户行为
* */
public class MarryCompay implements Marry{
//准备一个目标对象
private Marry target;
//通过代参构造传递目标对象
public MarryCompay(Marry target) {
this.target = target;
}
@Override
public void toMarry() {
befor();
target.toMarry();
after();
}
//用户行为的增强
private void after(){
System.out.println("新婚快乐");
}
private void befor(){
System.out.println("婚礼在布置");
}
}
定义一个test类去实现:
package org.example.proxy;
public class test {
public static void main(String[] args) {
//目标对象
You you=new You();
//代理对象
MarryCompay marryCompay=ne