概念:二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标
方法的时候,不再是直接对目标方法进行调用,而是通过代理类 间接调用。让不属于目标方法核心逻辑
的代码从目标方法中剥离出来—— 解耦。调用目标方法时先调用代理对象的方法,减少对目标方法的调
用和打扰,同时让附加功能能够集中在一起也有利于统一维护。
个人理解
为分离核心代码和非核心代码,创建一个代理类,
代理类中创建一个核心代码(核心功能)中的方法,
由代理类来间接调用核心代码中的方法,
再将非核心代码(附加功能)写在代理类中,
方便进行对附加功能进行统一维护
减少对核心功能的打扰
在通过代理模式进行功能增强的时,
不仅仅只有核心功能执行前后,
在catch,finally中都能增加附加功能
使用前
使用代理模式后
生活中的代理
广告商找大明星拍广告需要经过经纪人
合作伙伴找大老板谈合作要约见面时间需要经过秘书
房产中介是买卖双方的代理
相关术语
代理:将非核心逻辑剥离出来以后,封装这些非核心逻辑的类、对象、方法。
目标:被代理”套用”了非核心逻辑代码的类、对象、方法。
静态代理(一般不用)
静态代理确实实现了解耦,但是由于代码都写死了,完全不具备任何的灵活性。就拿日志功能来
说,将来其他地方也需要附加日志,那还得再声明更多个静态代理类,那就产生了大量重复的代
码,日志功能还是分散的,没有统一管理。
提出进一步的需求:将日志功能集中到一个代理类中,将来有任何日志需求,都通过这一个代理
类来实现。这就需要使用动态代理技术了。
动态代理
动态代理有两种(AOP底层用动态代理实现)
1.jdk动态代理:
要求必须有接口,最终生成的代理类和目标类实现相同的接口_
_ 在com.sun.proxy包下,类名为$proxy2
2.cglib动态代理_
_ 会继承目标类,并且和目标类在相同的包下
Original: https://www.cnblogs.com/bieyinan/p/16697164.html
Author: 别亦难
Title: 设计模式-代理模式
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685830/
转载文章受原作者版权保护。转载请注明原作者出处!