news 2026/7/15 10:33:32

什么是代理模式?一般用在什么场景?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是代理模式?一般用在什么场景?

面试

代理模式是一种结构型设计模式,核心思想是在不改变原始对象的前提下,通过一个代理对象来控制对原始对象的访问,可以在调用前后加点料,比如权限校验、日志记录、缓存等。

这个模式在业务开发中太常见了。Spring AOP 就是基于动态代理实现的,你写的@Transactional@Async@Cacheable这些注解能生效,底层都是代理在干活。RPC 框架也是靠动态代理,让调用远程方法跟调本地方法一样丝滑,Dubbo、gRPC 都是这个套路。

代理模式的结构很简单:客户端不直接调真实对象,而是调代理对象,代理对象内部持有真实对象的引用,在调用真实对象方法前后可以插入额外逻辑。

代理模式主要用在这几个场景:

  1. 访问控制:调方法前先检查权限,没权限直接拦住
  2. 延迟加载:真实对象创建成本高,用代理先顶着,真正用到时才初始化
  3. 远程代理:把网络通信细节封装在代理里,客户端以为在调本地方法
  4. 日志监控:统一在代理层记录方法调用耗时、参数、异常,不用每个方法都加代码
// 接口interfaceUserService{voidsave(Useruser);}// 真实对象classUserServiceImplimplementsUserService{publicvoidsave(Useruser){System.out.println("保存用户: "+user.getName());}}// 代理对象:加了日志和耗时统计classUserServiceProxyimplementsUserService{privateUserServicetarget;publicUserServiceProxy(UserServicetarget){this.target=target;}publicvoidsave(Useruser){longstart=System.currentTimeMillis();System.out.println("开始调用 save 方法");target.save(user);// 调真实对象System.out.println("调用结束,耗时: "+(System.currentTimeMillis()-start)+"ms");}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 10:33:17

uos-exporter BMC监控:服务器硬件健康状态实时监控解决方案

uos-exporter BMC监控:服务器硬件健康状态实时监控解决方案 【免费下载链接】uos-exporter uos-exporter collects metrics from os 项目地址: https://gitcode.com/openeuler/uos-exporter 前往项目官网免费下载:https://ar.openeuler.org/ar/ …

作者头像 李华
网站建设 2026/7/15 10:31:01

模块电源MOSFET驱动电路设计与优化实践

1. 模块电源中MOSFET驱动电路的重要性在模块电源设计中,MOSFET作为功率开关器件扮演着关键角色。我从事电源设计十多年来,发现很多工程师在电路设计时往往更关注拓扑结构和控制算法,却忽视了驱动电路这个"幕后功臣"。实际上&#x…

作者头像 李华
网站建设 2026/7/15 10:27:37

算法小课堂(十)分支限界法实战:从理论到代码的广度优先寻优

1. 分支限界法核心思想解析 分支限界法 就像一位聪明的探险家,在迷宫般的解空间树中寻找最优宝藏。与回溯法的"一条路走到黑"不同,它采用 广度优先策略 ,同时派出多个分身探索不同路径。想象你在玩扫雷游戏时,会先点…

作者头像 李华
网站建设 2026/7/15 10:27:30

从广播到组播:RIPv1与RIPv2的核心演进与实战验证

1. RIP协议的前世今生:从广播到组播的进化之路第一次接触RIP协议是在2013年给某连锁超市部署网络时,当时用RIPv1连接了20多家门店的路由器。结果每到营业高峰期,网络就卡得像老牛拉车——后来抓包才发现,所有路由器都在用广播风暴…

作者头像 李华
网站建设 2026/7/15 10:25:01

解放Windows任务栏空间:RBTray让你的桌面管理更高效

解放Windows任务栏空间:RBTray让你的桌面管理更高效 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否经常面对Windows任务栏上堆积如山的窗口图标&#x…

作者头像 李华
网站建设 2026/7/15 10:21:16

未来展望:openEuler/epkg-merge 路线图与新功能预告

未来展望:openEuler/epkg-merge 路线图与新功能预告 【免费下载链接】epkg-merge merge multiple layers of package configs 项目地址: https://gitcode.com/openeuler/epkg-merge 前往项目官网免费下载:https://ar.openeuler.org/ar/ openeule…

作者头像 李华