编程学习网 > 编程语言 > Python > Python 代理模式 (Proxy Pattern):它是替身,但却能掌控生死!
2026
01-23

Python 代理模式 (Proxy Pattern):它是替身,但却能掌控生死!


大家好,欢迎来到我们 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教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取