1、简述
代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。
设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git
2、什么是代理模式?
代理模式的核心思想是通过一个代理对象来间接访问目标对象,从而为目标对象增加额外的功能或限制。代理模式的常见用途包括:
- 控制访问:限制对目标对象的直接访问。
- 延迟加载:当对象的创建成本较高时,通过代理模式实现按需加载。
- 增强功能:在目标对象的行为前后添加其他逻辑。
代理模式通常由以下几个角色组成:
- 抽象主题(Subject):定义目标对象和代理对象的共同接口。
- 真实主题(RealSubject):实现了抽象主题的真实对象。
- 代理(Proxy):持有对真实主题的引用,并通过实现抽象主题接口来控制对真实主题的访问。
3、实际案例
3.1 实现静态代理
一个 UserService
提供用户的基本操作,我们通过代理实现日志记录功能。
// 接口定义
public interface UserService {
void addUser(String name);
}
// 目标类
public class UserServiceImpl implements UserService {
@Override
public void addUser(String name) {
System.out.println("User added: " + name);
}
}
// 代理类
public class UserServiceProxy implements UserService {
private final UserService userService;
public UserServiceProxy(UserService userService) {
this.userService = userService;
}
@Override
public void addUser(String name) {
System.out.println("[LOG] Adding user...");
userService.addUser(name);
System.out.println("[LOG] User added.")