二、07【设计模式】之代理模式

代理模式是一种设计模式,用于在客户端与目标对象之间创建中介,以控制对目标对象的访问。它在租房中介、婚介等领域有所应用,可以保护目标对象,降低耦合性,并增强功能。代理模式分为静态代理和动态代理,其中动态代理包括JDK和CGLIB实现。JDK动态代理通过反射机制实现,而CGLIB则是通过继承目标对象实现。两者在生成代理对象的方式和执行效率上有所不同。
摘要由CSDN通过智能技术生成

今天的博客主题

       设计模式 ——》 设计模式之代理模式


代理模式 PP (Proxy Pattern)

 

定义

代理模式是为其他对象提供一种代理,以便控制对这个对象的访问

在一些特殊情况下,一个对象不适合或者不能直接引用另一个对象,代理对象就可以在客户端与目标对象之间起到中介的作用。

 

应用场景

生活中的租房中介,婚介,黄牛,事物代理,非侵入式的日志监听等都是代理模式的体现。

当无法或者不想直接引用某个对象或访问某个对象存在困难时,可以使用代理对象来间接访问。

使用代理模式主要有两个目的:1保护目标对象,2增强目标对象。

 

优点

1)将代理对象与目标对象分离

2)在一定的程度上降低系统耦合性,扩展性好。

3)起到保护目标对象的作用

4)增强目标对象的功能

5)

 

缺点

1)造成系统在设计中类的数量增加。

2)在客户端与目标对象见增加一层代理对象,请求处理速度可能变慢

3)增加系统的复杂度

4)

 

源码中的应用

代理模式在源码中使用最典型的就是 SpringAop 的动态代理实现。

类图

AopProxy:为已配置的AOP代理委托接口,允许创建实际的代理对象。

对于JDK动态代理和CGLIB代理,可以使用现成的实现,如DefaultAopProxyFactory所应用的。

AopProxyFactory:接口将由能够基于 AdvisedSupport 配置对象创建AOP代理的工厂实现。

代理应遵守以下条件:

1)实现配置指示应该代理的所有接口。

2)实现建议的接口。

3)实现equals方法来比较代理接口、建议和目标。

4)如果所有访问和目标都是可序列化的,则它们应该是可序列化的。

5)如果访问和目标是线程安全的,则它们应该是线程安全的。

代理可能允许也可能不允许更改通知。如果代理不允许更改建议(例如,因为配置已冻结),则代理应在尝试更改建议时抛出AopConfigException。

DefaultAopProxyFactory:默认的AopProxyFactory实现,创建CGLIB代理或JDK动态代理。

如果给定的AdvisedSupport实例满足以下条件之一,则创建CGLIB代理:

1)配置优化标记

2)配置 proxyTargetClass 属性

3)未指定代理接口(S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值