一、什么是代理模式?
代理模式:为其他对象提供一种代理,以控制对这个对象的访问。代理类的对象本身并不真正实现服务,我们在访问实际对象时,是通过代理对象来访问的。
二、代理模式的分类
-
静态代理:代理和被代理之前都是确定的。都实现相同的接口或继承相同的抽象类
-
JDK动态代理:代理对象不需要实现接口,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的(是利用JDK的API生成的)。
-
CGLib代理
三、代理模式的使用
🧩静态代理
Eg:房东(被代理角色)要出租房子,租客要租房子,中介(代理角色)帮房东出租房子
代理角色一般会有一些附属操作——中介会有带你看房、收中介费等操作
代理模式的好处:
-
可以使被代理角色的操作更加纯粹,不需要关注一些公共的业务——房东只需要出租房子即可
-
公共业务交给代理角色,实现了业务的分工
-
公共业务发生扩展时,方便集中管理
缺点:
一个被代理角色就会产生一个代理对象,代码量会翻倍
代码步骤:
1.公共接口
/**
* @Author: YIYANG
* @Date: 2022/5/10 20:38
* @DESC: 租房
*/
public interface Rent {
void rent();
}
2.被代理角色
public class Host implements Rent {
@Override
public void rent() {
System.out.println("房东要出租房子");
}
}
3.代理角色
public class Proxy implements Rent {
private Host host;
public Proxy() {
}
public Proxy(Host host) {
this.host = host;
}
@Override
public void rent() {
seeHouse();
host.rent();
hetong();
fare();
}
//代理角色一般会有一些附属操作——中介会有带你看房、收中介费等操作
//看房
public void seeHouse(){
System.out.println("通过中介看房");
}
//签租赁合同
public void hetong(){
System.out.println("签租赁合同");
}
//收中介费
public void fare(){
System.out.println("收中介费");
}
}
4.客户端访问代理角色
public class Client {
public static void main(String[] args) {
Host host = new Host();
//代理
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
动态代理
动态代理的底层:反射
动态代理的代理类时动态生成的,不是写好的。
动态代理的分类:
-
基于接口——JDK动态代理
-
基于类——CGLib代理
🧩JDK动态代理
🧩CGLib代理
未完待续.......
好啦,就先到这里吧~
喜欢我的可以点赞、关注、收藏,如果有什么技术上的疑问,欢迎留言或私信~