Java设计模式(代理模式整理中ing)

一、代理模式

1、代理模式定义:

**代理模式:**由于某些原因要给某对象提供一个代理以控制对该对象的访问,这时访问对象不适合或者不能够直接引用目标对象,代理对象作为访问对象与目标对象之间的中介进行连接调控调用。

2、代理模式的三种角色:

2.1 抽象主题

2.2 真实主题类

2.3 代理(Proxy)类

3、代理模式的分类

3.1、静态代理模式

代理对象和目标实现同一个接口

优点:可以在不修改目标对象的前提下扩展目标对象的功能

缺点:1、冗余 由于代理对象和目标对象实现了同一个接口,会产生很多的代理类

2、不易维护 一旦接口增加方法,目标对象和代理对象都需要进行修改

3.2、动态代理模式

3.2.1、用jdk的api

动态代理是动态的在内存中构建代理对象,从而实现对目标对象的代理能力

所以动态代理成为jdk代理或者叫接口代理

3.2.2 cglib动态代理

添加了jar包

第三方代码的生成类库,运行时内存中动态生成一个子对象从而实现对目标对象功能的扩展.

3.3、静态代理和动态代理的区别:

动态代理对象不用实现接口但是要求目标对象必须实现接口,否则不能使用动态代理

1.静态代理在编译时就已经实现了编译完成后代理类是一个class文件
2.动态代理在运行时候动态生成,编译完成后没有class文件,从而实现动态的生成字节码并加载到JVM中

3.4、cglib与动态代理最大的区别就是:

1.使用动态代理的对象必须实现一个或者多个接口

2.使用cglib代理的兑现则无需实现接口,达到代理类无入侵

3.使用cglib需要引入cglib的jar包,如果已经有了spring-core的jar包,则无需引入,因为Spring中包含了cglib

4.总结

1.静态代理实现较简单,只要代理对象对目标对象进行包装,即可实现增强功能,但静态代理只能为一个目标对象服务,如果目标对象过多,则会产生很多代理类。
2.JDK动态代理需要目标对象实现业务接口,代理类只需实现InvocationHandler接口。
3.动态代理生成的类为 class com.sun.proxy.Proxy0,cglib代理生成的类为class cn.test.baocuonisini.UserDaoEnhancerByCGLIB$b5ec9bbd。
4.静态代理在编译时产生class字节码文件,可以直接使用,效率高。
5.动态代理必须实现InvocationHandler接口,通过反射代理方法,比较消耗系统性能,但可以减少代理类的数量,使用更灵活。
6.cglib代理无需实现接口,通过生成类字节码实现代理,比反射稍快,不存在性能问题,但cglib会继承目标对象,需要重写方法,所以目标对象不能为final类。

相关推荐
qq_459730031 分钟前
C 语言面向对象
c语言·开发语言
佚先森9 分钟前
2024ARM网络验证 支持一键云注入引流弹窗注册机 一键脱壳APP加固搭建程序源码及教程
java·html
菜鸟学Python10 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
小白不太白95012 分钟前
设计模式之 责任链模式
python·设计模式·责任链模式
一个小坑货17 分钟前
Cargo Rust 的包管理器
开发语言·后端·rust
bluebonnet2722 分钟前
【Rust练习】22.HashMap
开发语言·后端·rust
古月居GYH22 分钟前
在C++上实现反射用法
java·开发语言·c++
吾与谁归in40 分钟前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in42 分钟前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式
在下不上天1 小时前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python