【总结】代理模式
1.概述
代理模式:为其它对象提供一种代理以便控制这个对象的访问
2.代理模式分类
1.静态代理:我们自己静态定义的代理类
2.动态代理:通过程序动态生成代理类
(1)基于接口的动态代理:jdk动态代理
(2)基于类的动态代理:CGLIB
3.静态代理
1.角色
(1)接口(租房):是对象和他的代理共同的接口
(2)真实角色(房东):是实现抽象接口的类
(3)代理角色(中介):内部含有真实对象的引用,从而可以操作真实对象
2.实现
//租房接口
public interface Rent {
public void rent();
}
//主人去实现租房接口
public class Host implements Rent {
@Override
public void rent() {
System.out.println("房东要出租房子");
}
}
//代理类
public class Proxy implements Rent{
private Host host;
//有参
public Proxy(Host host){
this.host=host;
}
@Override
public void rent() {
//代理直接掉host的方法 进行代理
host.rent();
seeHouse();
Money();
}
public void seeHouse(){
System.out.println("看房子");
}
public void Money(){
System.out.println("谈金钱");
}
}
//客户
public class Client {
public static void main(String[]args){
//需要把房东new出来
Host host = new Host();
//把房东拿给代理 让代理直接掉房东的方法
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
3.优缺点
1.优点:
业务类只需要关注业务逻辑本身,保证了业务类的重用性
2.缺点:
(1)代理类实现接口,接口增加一个方法,代理类也需要增加。增加了维护的复杂度
(2)静态代理中的代理类是针对某一个类去做代理的,那么假设一个系统中有100个Service,则需要创建100个代理类
4.动态代理
相比于静态代理,动态代理在创建代理对象上更加的灵活,动态代理类的字节码在程序运行时,由 Java 反射机制动态产生。它会根据需要,通过反射机制在程序运行期,动态的为目标对象创建代理对象,无需程序员手动编写它的源代码。动态代理不仅简化了编程工作,二且提高了软件系统的可扩展性,因为反射机制可以生成任意类型的动态代理类。代理的行为可以代理多个方法,即满足生产需要的同时又达到代码通用的目的。
动态代理的两种实现方式:
(1)JDK 动态代理
(2)CGLIB动态代理
具体实现看:
https://www.cnblogs.com/muacheng/p/13741763.html

浙公网安备 33010602011771号