什么是代理模式?一般用在什么场景?

📅 发布时间:2026/7/15 10:32:03 👁️ 浏览次数:
什么是代理模式?一般用在什么场景?
面试代理模式是一种结构型设计模式核心思想是在不改变原始对象的前提下通过一个代理对象来控制对原始对象的访问可以在调用前后加点料比如权限校验、日志记录、缓存等。这个模式在业务开发中太常见了。Spring AOP 就是基于动态代理实现的你写的Transactional、Async、Cacheable这些注解能生效底层都是代理在干活。RPC 框架也是靠动态代理让调用远程方法跟调本地方法一样丝滑Dubbo、gRPC 都是这个套路。代理模式的结构很简单客户端不直接调真实对象而是调代理对象代理对象内部持有真实对象的引用在调用真实对象方法前后可以插入额外逻辑。代理模式主要用在这几个场景访问控制调方法前先检查权限没权限直接拦住延迟加载真实对象创建成本高用代理先顶着真正用到时才初始化远程代理把网络通信细节封装在代理里客户端以为在调本地方法日志监控统一在代理层记录方法调用耗时、参数、异常不用每个方法都加代码// 接口interfaceUserService{voidsave(Useruser);}// 真实对象classUserServiceImplimplementsUserService{publicvoidsave(Useruser){System.out.println(保存用户: user.getName());}}// 代理对象加了日志和耗时统计classUserServiceProxyimplementsUserService{privateUserServicetarget;publicUserServiceProxy(UserServicetarget){this.targettarget;}publicvoidsave(Useruser){longstartSystem.currentTimeMillis();System.out.println(开始调用 save 方法);target.save(user);// 调真实对象System.out.println(调用结束耗时: (System.currentTimeMillis()-start)ms);}}