什么是代理模式
概念:
代理模式(Proxy Pattern):代理模式是 Java 常见的设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理对象,来间接的调用实际的对象
代理模式的主要优点有:
代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
代理对象可以扩展目标对象的功能;
代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性
其主要缺点是:
代理模式会造成系统设计中类的数量增加
在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
增加了系统的复杂度;
代理模式可以分为两种:静态代理、动态代理
静态:由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的 .class 文件就已经存在了。
动态:在程序运行时,运用反射机制动态创建而成
静态代理
静态代理模式由三个部分构成:
一个公共的接口
一个被代理角色
一个代理角色
1.定义接口
2.目标实现类和代理实现类
动态代理的实现
动态代理 也叫 JDK 代理或接口代理
在动态代理中分为两种实现方式:
使用 JDK 的 Proxy 类实现动态代理
创建业务接口
2、 创建接口实现类
3、 创建生成代理对象的工厂
4、 创建切面对象
使用 CGLIB 实现动态代理
CGLB(Code Generation Library)是一个高性能开源的代码生成包,它被许多框架所使用,其底层是通过使用一个小而快的字节码处理框架 ASM(Java 字节码操控框架)转换字节码并生成新的类
1、添加 jar 包
2、 创建业务接口
3、创建接口实现类
4、创建生成代理对象的工厂
5、 创建切面
6、 创建测试类
静态代理和动态代理主要有以下几点区别:
静态代理只能通过手动完成代理操作,如果被代理类增加了新的方法,则代理类需要同步增加,违背开闭原则。
动态代理采用在运行时动态生成代码的方式,取消了对被代理类的扩展限制,遵循开闭原则。
若动态代理要对目标类的增强逻辑进行扩展,结合策略模式,只需要新增策略类便可完成,无需修改代理类的代码