静态代理 设计模式
在 Java 中,静态代理是一种设计模式,它通过在编译期就确定代理类与被代理类的关系,实现对目标对象的增强。
静态代理包含以下几个核心角色:
- 抽象主题(Subject):定义代理类和被代理类的共同接口
- 真实主题(Real Subject):被代理的对象,实际业务逻辑的执行者
- 代理(Proxy):持有真实主题的引用,在调用真实主题方法前后可以添加额外操作
// 1. 抽象主题接口
interface Subject {void doAction();
}// 2. 真实主题(被代理类)
class RealSubject implements Subject {@Overridepublic void doAction() {System.out.println("执行核心业务逻辑");}
}// 3. 代理类
class Proxy implements Subject {private Subject realSubject; // 持有真实主题的引用// 构造器初始化真实主题public Proxy() {this.realSubject = new RealSubject();}@Overridepublic void doAction() {System.out.println("代理:执行前操作"); // 增强逻辑realSubject.doAction(); // 调用真实主题方法System.out.println("代理:执行后操作"); // 增强逻辑}
}// 测试
public class SimpleProxyDemo {public static void main(String[] args) {Subject proxy = new Proxy();proxy.doAction(); // 通过代理对象调用}
}
静态代理的优点:
- 实现简单,易于理解
- 在不修改目标对象的前提下,能对目标对象的功能进行扩展
- 静态代理适用于代理类较少、接口相对稳定的场景。
静态代理的缺点:
- 代理类与被代理类必须实现同一接口,导致代码冗余
- 当接口方法增加或修改时,代理类和被代理类都需要修改,维护成本高
- 每个被代理类都需要对应一个代理类,类的数量会急剧增加