
大家好,欢迎来到我们 23 种 GoF 经典设计模式的第十二种,结构型模式(Structural Patterns)的第七种——代理模式(Proxy Pattern)。
在软件架构中,直接访问一个对象有时候是昂贵的(比如加载一张 100MB 的图片)、危险的(比如直接操作生产数据库)、或者受限的(比如跨网络调用 RPC)。
这时候,我们需要一个“中间人”。它长得和真实对象一模一样(接口相同),客户端根本分不清谁是真身、谁是替身。但这个替身,却悄悄地在幕后掌控了一切。
这就是 代理模式 (Proxy Pattern)。
1️⃣ 真实业务痛点:不可控的“直接访问”
假设你正在开发一个 大模型(LLM)应用,核心功能是调用 GPT-4 进行复杂的商业分析。
原始代码的隐患:
面临的问题:
1缺乏访问控制 (Protection):谁都能调,没有鉴权。2性能浪费 (Caching):重复的请求没有缓存,直接穿透到昂贵的后端。3资源滥用 (Lazy Loading):有时只是初始化了对象但还没用,却建立昂贵的网络连接。我们需要一个 “网关”,在请求到达 GPT4Service 之前,把这些脏活累活全处理掉。
2️⃣ 代理模式核心定义
代理模式 (Proxy Pattern)
为其他对象提供一种代理以控制对这个对象的访问。
核心心法:
•同构:代理类和真实类实现相同的接口。•持有:代理类内部持有真实类的引用。•控制:代理类决定是否(以及何时)调用真实类的方法。常见的代理类型:
1虚拟代理 (Virtual Proxy):延迟加载(只有在真正用的时候才创建昂贵对象)。2保护代理 (Protection Proxy):权限控制(你得有 Token 才能调)。3智能引用 (Smart Reference):在访问时执行额外动作(如引用计数、日志、缓存)。4远程代理 (Remote Proxy):代表一个在不同地址空间的对象(如 RPC Stub)。3️⃣ 模式结构与 UML (Mermaid)
注意 Proxy 和 RealSubject 之间的关系。
•Subject: 定义业务标准接口。
•RealSubject: 真正干活的苦力(如下载文件、连数据库)。
•Proxy: 守门人。它根据情况决定是否把请求转发给 RealSubject。
4️⃣ 实战案例:构建企业级“高成本 API 网关”
为了演示代理模式的强大,我们将构建一个 SaaS 数据分析服务的代理层。
它将同时具备:权限校验(保护代理)、结果缓存(智能引用) 和 延迟初始化(虚拟代理) 的功能。
这是一个非常典型的 Python 后端中间件场景。
4.1 定义标准接口 (Subject)
4.2 真实服务 (RealSubject)
这个类代表“昂贵”的操作。注意它的初始化和调用成本都很高。
以上就是“Python 代理模式 (Proxy Pattern):它是替身,但却能掌控生死!”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/13879/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料