首页/开发/代码质量与评审速查/代理模式 Proxy(结构型)
设计原则与模式62 条

代理模式 Proxy(结构型)

为其他对象提供同一接口的替身,控制访问:用于延迟加载、访问控制、日志审计、远程调用(RPC 存根);与装饰器的差别在意图——代理控制,装饰增强。

类型虚代理(延迟)/ 保护代理(权限)/ 远程代理 / 日志代理
对比Decorator 增强行为;Proxy 控制访问
实现静态代理或动态代理(JDK、CGLIB)

保护代理示例

保护代理示例
class AdminProxy implements Service {
    private final Service real;
    public Result call(User u, Request r) {
        if (!u.isAdmin()) throw new AccessDeniedException();
        return real.call(r);
    }
}

易错点

  • 动态代理吞掉原始异常类型:调用方契约被改变
  • 代理层塞业务逻辑:职责从真实对象迁移,两处都要维护

数据来源与参考

  • 《设计模式》(GoF)· Proxy
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌