设计模式——Proxy(代理)模式

前言

当我们需要控制一个对象的访问,或者需要对一类方法做一些增强时,代理模式便可以很好的实现我们的需求。

1 定义

Proxy模式:为对象提供一种代理,以实现对这个对象访问的控制。

2 适用性

    当需要控制对象的访问。 当需要对对象的功能做一些增强。 当我们需要做一些切面功能如:日志、登录拦截等。

3 结构

3.1 结构图

3.2 参与者

    Client:访问代理对象处理请求。 Subject:抽象接口,代理和实际对象均实现该接口。 ProxySubject:代理对象实现Subject,持有真实对象指针,控制对象的访问和其它操作。 Realsubject:真实对象,处理真正的调用请求。

4 Spring实际应用举例

Spring Aop大量使用了代理包括CGLIB代理和JDK动态代理,我们以Spring Aop的JDK动态代理为例。

4.1 Proxy——JdkDynamicAopProxy

JdkDynamicAopProxy最终调用的是Proxy.newProxyInstance生成对象如下: 该JdkDynamicAopProxy继承结构如下: 实现的invoke方法负责处理对代理对象的访问控制,具体过程可以参考源码。

5 总结

Proxy代理模式,应用非常广泛,其中spring框架的Aop实现就大量使用了代理模式,从而可以方便处理我们的切面控制等。

参考文献

[1]. 《设计模式》

经验分享 程序员 微信小程序 职场和发展