Lazy loaded image
代理模式:像明星经纪人一样管理对象访问
Words 1240Read Time 4 min
2026-1-22

代理模式:像明星经纪人一样管理对象访问

设计模式概述

代理模式(Proxy Pattern)就像娱乐圈的明星经纪人系统。当记者想采访周杰伦时,不会直接拨打他的私人电话,而是先联系经纪人(代理),由他决定是否转接请求、何时安排采访,或在必要时直接拒绝。这个模式通过引入代理对象控制对原始对象的访问,在不修改原始类代码的前提下,实现对目标对象的访问控制、功能增强或性能优化。

动机:为什么需要中间商?

想象你要开发一个在线文档系统,用户每次打开PDF都会触发完整文件下载。当用户连续点击10个文档时:
代理模式的必要性体现在三个核心痛点:
  1. 性能黑洞:实际只需要缩略图却加载整个文件
  1. 安全风险:敏感操作缺乏访问控制
  1. 耦合危机:客户端直接依赖具体实现类

适用场景:经纪人上岗条件

  • ✅ 需要远程服务调用(如gRPC通信代理)
  • ✅ 访问敏感资源需要权限校验(支付系统授权代理)
  • ✅ 创建昂贵对象需要延迟加载(大型3D模型代理)
  • ✅ 需要记录日志或监控指标(API调用统计代理)
  • ✅ 缓存高频访问结果(数据库查询代理)

模式结构解析

notion image

模式参与者

角色
现实比喻
职责说明
Subject
明星合约
定义RealSubject和Proxy的公共接口
RealSubject
周杰伦本人
实际执行业务逻辑的核心对象
Proxy
经纪人
控制访问并可能增强功能
Client
采访记者
通过代理与目标对象交互

C++实现:智能虚拟代理

让我们实现一个支持延迟加载的PDF文档代理系统:

工程实践:利弊权衡

某电商平台图片系统改造案例
优势效果
  • 首屏加载时间从3.2s → 0.4s
  • 内存占用降低72%
  • 非法访问请求拦截率100%
潜在缺陷
  1. 调试复杂度增加(需追踪代理链)
  1. 微服务场景可能引发级联故障
  1. RPC代理增加约5ms延迟
性能对比表
指标
直接访问
代理方案
内存占用
100%
28%
首屏时间
3200ms
400ms
错误恢复能力
较差
优秀
扩展灵活性

模式进化论

现代C++的代理模式变体:

设计启示

代理模式就像软件世界的"门禁系统",在以下场景特别耀眼:
  • 当需要为月球车控制系统添加地球到月球的通信缓冲层时
  • 在微服务架构中实现Circuit Breaker模式时
  • 为AI模型推理服务添加输入验证和结果缓存时
记住《设计模式》作者GoF的忠告:"代理模式应该被谨慎地使用——你确实需要一个经纪人,还是只是想显得很重要?"
参考文献:
  1. Gamma, Erich, et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.
  1. Meyers, Scott. Effective Modern C++. O'Reilly Media, 2014.
  1. 某电商平台图片系统优化案例 (NDA保护数据)
上一篇
XIAOMI 面试题
下一篇
用面试拷问嵌入式技术栈

Comments
Loading...