设计模式中,代理模式 (Proxy Pattern)的概念理解、示例说明,一文详解。
代理模式 (Proxy Pattern)
1. 概念
代理模式是一种 结构型设计模式,它的核心思想是:
不直接访问目标对象,而是通过一个代理对象间接访问目标对象。
这样做的目的可能是:
- 控制访问权限(保护代理 / 鉴权)。
- 添加额外功能(日志、缓存、延迟加载等)。
- 提高性能(远程代理、虚拟代理等)。
一句话总结:
👉 代理就是“中介”,对外表现得和真实对象一样,但能在前后做一些额外操作。
2. 原理
- 抽象接口:定义对象的对外统一行为。
- 真实对象(Real Subject):核心业务逻辑的实际执行者。
- 代理对象(Proxy):持有真实对象的引用,拦截方法调用,在调用前后附加控制逻辑。
流程:
Client → Proxy → RealSubject
3. 生活例子:旅行社代办护照
没有代理的情况
你要办护照:
- 你亲自跑到出入境大厅
- 填表
- 排队
- 交钱
- 等待
- 领取护照
有代理的情况(旅行社代理你办)
- 你把资料交给旅行社
- 旅行社帮你跑流程(权限、排队、交钱、进系统)
- 旅行社再把结果交给你
👉 对你来说,你只需要“找旅行社”,不需要知道背后怎么跑流程。
旅行社就是 代理。
4. 代码示例(Java)
// 抽象接口:办证服务
interface PassportService {
void applyPassport();
}
// 真实对象:出入境大厅
class RealPassportOffice implements PassportService {
public void applyPassport() {
System.out.println("本人去出入境大厅:填表、排队、交钱、录入系统、等待、领护照");
}
}
// 代理对象:旅行社
class TravelAgencyProxy implements PassportService {
private RealPassportOffice realOffice;
public TravelAgencyProxy(RealPassportOffice realOffice) {
this.realOffice = realOffice;
}
@Override
public void applyPassport() {
// 代理前:收集客户资料
System.out.println("旅行社收集资料,代办手续...");
// 代理调用真实对象
realOffice.applyPassport();
// 代理后:交付护照
System.out.println("旅行社把护照交给客户。");
}
}
// 客户端
public class ProxyDemo {
public static void main(String[] args) {
PassportService office = new RealPassportOffice();
PassportService agency = new TravelAgencyProxy(office);
agency.applyPassport();
}
}
运行结果:
旅行社收集资料,代办手续...
本人去出入境大厅:填表、排队、交钱、录入系统、等待、领护照
旅行社把护照交给客户。
5. 核心总结
- 本质:代理对象 包装并控制 对真实对象的访问。
- 优点:能在不改变真实对象代码的情况下,附加额外功能。
- 生活类比:旅行社代办护照,客户不需要自己亲自跑流程。
- 常见应用:鉴权、日志、缓存、远程调用(RPC)、Spring AOP。

浙公网安备 33010602011771号