动态代理

本文介绍了动态代理模式的概念及其在编程中的应用。通过实例说明了代理类如何为原有类添加额外功能,同时不影响原有功能的使用。此外,还介绍了匿名内部类和反射的基本知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在群里面讨论到这个问题了,所以就在这里就简单讲解一下动态代理模式吧~

在讲动态代理模式之前,我们首先要弄明白什么是代理


代理,这个概念在生活中似乎很常见

通常代理都有两个作用,一个是方便你去使用它代理的东西


当一个类被创建的时候,虽然我们可以直接使用它

但是在不同的场合,可能在使用它之前,还需要对它进行一些额外的处理

比如说,WOW在中国这个场合使用的时候,就需要对它进行一些额外的处理……

但是,不管再怎么处理,它本质上还是WOW

除了那些图标和各种贴图被和谐了之外,在游戏内容上还是完全没变的


所以,代理的作用就是:

根据不同的情况,往原先的功能上添加一些额外的功能

但是这些额外的功能的添加,并不会影响到原有功能的使用

如果你通过代理类来使用这些功能的话,就会在使用原有功能的同时,执行这些额外的功能

*注:可能这个例子不是太贴切,并且实际上代理还有很多种其他的理解和含义

但是在此我们仅注重它的结论,以及在编程时的作用就好了


现在,我们的重点就出来了,那就是代理类应该怎么写

而“代理类”,既然叫“类”,那么它就应该是为一个“类”进行代理的

为了方便下面的讲解,我们暂且管被代理的这个类叫做“原有类”好了

然后,根据上面给出的代理的作用,我们可以看出,一个好的代理类,应当符合以下两个条件

1、能够往原有类的功能上添加一些额外的功能

2、不影响原有类中功能的使用




为了方便讲解,我们还是先了解一下匿名内部类和反射的知识吧:



首先,匿名内部类是什么呢?
说白了,匿名内部类就是当你需要一个类的时候,[color=Red]现定义现使用的一个类[/color]


举个例子吧,假设现在有一个方法叫execute,这个方法要求传入一个Runnbale类型的参数
也就是说,这个方法被定义成execute(Runnable runnable);这样
这样,如果你想要调用execute这个方法,就必须要往里面传入一个Runnable类型的对象


而众所周知,Runnable这是一个接口,而接口是不能直接创建对象的
所以,如果你想要调用这个方法的话,你还必须要先创建一个Runnable接口的实现类
这样,你在调用execute方法的时候,就只需要往里面传入这个实现类的一个对象就可以了


这样,我们就可以引入现定义现使用的概念了,那就是:
如果你想要调用这个方法的话,你只需要直接创建一个Runnable接口的实现类的对象就可以了




而你为什么要定义这个类呢?




当使用匿名内部类的时候,表示类体的{}紧跟在构造方法之后(此句重要)
匿名内部类的使用场合:
当试图创建接口或者抽象类对象的时候,就使用内部匿名类
即:匿名类一般不主动定义,而是当创建一个已有接口或抽象类而不想要定义一个新的类的时候,才需要使用匿名内部类来实现抽象方法
 
匿名内部类会产生.class(自解码)文件,名称是classname$1/2/3/4...
 
匿名内部类能定义的和能直接访问的都和普通的局部内部类完全一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值