【Java】【设计模式】动态代理

因为需要看spring源代码,看到代理这个词看不懂,后面顺着线索发现需要学习一下设计模式的动态代理,然后疯狂补课,结果发现,都不知道在说什么例子给的也比较抽象,好在自己付出快4小时还是有一些微弱的感悟的。写一写,免得自己忘记也可以帮一帮码友。

首先是例子,我发现其他博客写的例子,也就是什么中介什么租房子,根本感觉不适合理解他的本质,他虽然能够快速理解三方但是我一直没明白内核。

他的内核实际上非常的简单,就是我有一个代码A,但是我现在需要针对代码A执行之后,我需要立即执行一下代码B。(或者在代码A之前我一定要执行代码A)那简单直接B CV一下到代码A不就完了。

不行! 不够优雅~
其实只是破坏了软件开发原则,尽量让自己已经写完的代码尽量不去修改。
所以这时候要一个代理!
所以他要完成的工作就是在代码A之上,完成代码B。也就是完全不动已经原有的代码,新增一个代理类就能够实现。

所以在结合什么中介那三个模型,你就能够明白被代理的实际上就是不想改代码的A,也就是房东,proxy也就是中介,调用者也就是租客。

但最重要的是:lz就是不想改A代码,我就是要写增量式
这个才是核心是目标,也是我个人认为为啥要有代理模式。。。

好了,明白这个原理,去看别人写的代码就好理解很多很多很多了。

这里贴两个个人觉得写的比较好的博客:
https://blog.csdn.net/Passer_hua/article/details/122617628
https://blog.csdn.net/m0_51380306/article/details/119912574

我个人插一嘴,我并没有get到静态代理跟直接JDK使用的动态代理有什么区别。
因为我的理解是,从代码编码角度来说,我都是做到了代码A不动,新增一个类,然后PSVM执行写一写。
完了我看到那个博客说的是在生成代理不同,确实,因为静态代理中,我们编写的实际上就是代理类,但是在JDK里面反而不是,相当于只是一个Factory类似的东西,最终的代理是在proxy.newinstance那边生成的。
但在我看来我还是没有太感受到他们之间的差别。
写着突然感觉可以猜到,应该是在proxy第二个参数那边,传入接口数组那边可能能写个花的。。但我现在还参透不了。
有大神希望解答一下,谢谢~

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值