设计模式中,代理模式 (Proxy Pattern)的概念理解、示例说明,一文详解。

代理模式 (Proxy Pattern)

1. 概念

代理模式是一种 结构型设计模式,它的核心思想是:

不直接访问目标对象,而是通过一个代理对象间接访问目标对象。

这样做的目的可能是:

  • 控制访问权限(保护代理 / 鉴权)。
  • 添加额外功能(日志、缓存、延迟加载等)。
  • 提高性能(远程代理、虚拟代理等)。

一句话总结:
👉 代理就是“中介”,对外表现得和真实对象一样,但能在前后做一些额外操作。


2. 原理

  • 抽象接口:定义对象的对外统一行为。
  • 真实对象(Real Subject):核心业务逻辑的实际执行者。
  • 代理对象(Proxy):持有真实对象的引用,拦截方法调用,在调用前后附加控制逻辑。

流程:

Client → Proxy → RealSubject

3. 生活例子:旅行社代办护照

没有代理的情况

你要办护照:

  1. 你亲自跑到出入境大厅
  2. 填表
  3. 排队
  4. 交钱
  5. 等待
  6. 领取护照

有代理的情况(旅行社代理你办)

  1. 你把资料交给旅行社
  2. 旅行社帮你跑流程(权限、排队、交钱、进系统)
  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。
posted @ 2025-09-06 16:17  AlphaGeek  阅读(70)  评论(0)    收藏  举报