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

面试

代理模式是一种结构型设计模式,核心思想是在不改变原始对象的前提下,通过一个代理对象来控制对原始对象的访问,可以在调用前后加点料,比如权限校验、日志记录、缓存等。

这个模式在业务开发中太常见了。Spring AOP 就是基于动态代理实现的,你写的 @Transactional@Async@Cacheable 这些注解能生效,底层都是代理在干活。RPC 框架也是靠动态代理,让调用远程方法跟调本地方法一样丝滑,Dubbo、gRPC 都是这个套路。

代理模式的结构很简单:客户端不直接调真实对象,而是调代理对象,代理对象内部持有真实对象的引用,在调用真实对象方法前后可以插入额外逻辑。

代理模式主要用在这几个场景:

  1. 访问控制:调方法前先检查权限,没权限直接拦住
  2. 延迟加载:真实对象创建成本高,用代理先顶着,真正用到时才初始化
  3. 远程代理:把网络通信细节封装在代理里,客户端以为在调本地方法
  4. 日志监控:统一在代理层记录方法调用耗时、参数、异常,不用每个方法都加代码
java 复制代码
// 接口
interface UserService {
    void save(User user);
}

// 真实对象
class UserServiceImpl implements UserService {
    public void save(User user) {
        System.out.println("保存用户: " + user.getName());
    }
}

// 代理对象:加了日志和耗时统计
class UserServiceProxy implements UserService {
    private UserService target;

    public UserServiceProxy(UserService target) {
        this.target = target;
    }

    public void save(User user) {
        long start = System.currentTimeMillis();
        System.out.println("开始调用 save 方法");
        target.save(user);  // 调真实对象
        System.out.println("调用结束,耗时: " + (System.currentTimeMillis() - start) + "ms");
    }
}
相关推荐
云云只是个程序马喽1 小时前
海外短剧平台搭建方案:私有化源码系统选型|云微短剧系统技术架构拆解
java·php
C137的本贾尼3 小时前
第七篇:消息队列(MQ)——就是个带存储的异步通信管道
java·开发语言·中间件
Flittly3 小时前
【AgentScope Java新手村系列】(19)多模态-图像音频视频
java·spring boot·spring
Javatutouhouduan3 小时前
国内大厂Java面试高频题库(2026突击版)
java·架构师·java面试·java面试题·后端开发·java程序员·java八股文
Tim_103 小时前
【C++】017、new/delete与malloc/free的区别
java·数据结构·算法
青山木3 小时前
一把 Redis 分布式锁,踩透四个坑:锁争抢、僵尸锁、锁过期、锁丢失
java·数据库·redis·后端
Java内核笔记3 小时前
万字避坑!Spring Boot 3.x 升 4.0 最全升级指南(附 Migration Checklist,建议收藏⭐)
java·后端
cfm_29144 小时前
SpringBoot启动原理
java·spring boot·spring
程序员小八7775 小时前
从 0 学习 MySQL 索引——7 大核心精讲
android·学习·mysql