我们现在来学习代理模式,我们首先看一下代理模式的定义与类型,他的定义是说,为其他对象提供一种代理,以控制对这个对象的 访问,代理对象在客户端和目标对象之间呢,起到一个中介的作用,那这句话如何理解,就和我们租房子是一样的,假设我们找中介, 租房子,然后呢租那种全托管的房子,最后出租出来的房子呢,是房东,房东呢,就是目标对象,那水电费结算,都是代理类来做的, 代理类就是中介,但是我们直接可以和代理,也就是和租房中介来签租房合同,不需要和房东直接接触,也就是中介代理房东, 来和我们签这个合同,并且他对目标对象进行了一个增强,例如在签合同之前,先草拟合同,签完合同之后呢,还进行了一些水电费 核算的,这些工作,那这两点可以理解成,租房子的一些方法,对他的一个增强,那你们学Spring都用过AOP,那AOP就是面向切面编程, OOP就是面向对象编程,那AOP里面的before和after,就可以理解成before就是草拟合同,after就是水电费结算,而要增强的目标方法呢, 正是租房子这种行为,那他的类型是结构型
然后我们来看一下代理的适用场景,首先保护目标对象,例如租房子,我们可能连房东面都没见过, 房东长什么样我们都不知道,然后呢增强目标对象,那增强目标对象呢,这里面范围也比较大,比如增强 目标对象的一个租房子,这个行为方法,也是增强目标对象
那我们可以看一下代理对象的优点有哪些呢,首先代理模式能将代理对象与真实被调用的目标对象进行分离, 这个呢还是很好理解的,然后第二点,在一定程度上降低了系统的耦合度,扩展性比较好,第三点保护目标对象, 那因为代理模式,在客户端和目标对象之间,起到一个中介作用,代理模式可以拿到真实对象的引用,而客户端呢, 和代理类进行交互,然后就是增强目标对象
例如before和after,我们看一下代理模式有哪些缺点呢,第一条很容易理解,代理模式会造成系统设计中类的增加, 如果我们使用代理模式,肯定要添加一些代理类,这个就导致类的数目增加,然后在客户单和目标对象之间,增加了一个 代理对象,会造成请求速度变慢,当然这个是根据具体的业务场景来看,包括进行压测,还有大批量的测试,多线程的并发, 等等,这个和系统的应变也是有关的,那这个呢也很好理解,例如增强了目标对象的方法,执行的代码多了,从理论上来说, 相对速度肯定会变慢,然后呢就是增加了系统的复杂度,那我们实现了代理模式,需要额外的工作,那有些代理模式的实现, 非常复杂,自然增加了系统的复杂度
文章来源: https://blog.csdn.net/Leon_Jinhai_Sun/article/details/91041988