java 静态代理笔记
时间: 2023-10-11 19:16:48 浏览: 54
Java 静态代理是一种常见的设计模式,其主要思想是通过一个代理对象来控制对真实对象的访问,从而增强真实对象的功能或者限制对真实对象的访问。
静态代理的实现需要创建一个代理类和一个真实对象类,代理类和真实对象类都实现同一个接口或者继承同一个父类,代理类中持有真实对象的引用,在代理类的方法中调用真实对象的方法并对其进行增强或者限制。
静态代理的优点是实现简单,可以在不修改真实对象的情况下对其进行增强或者限制,缺点是需要为每一个真实对象类创建一个代理类,工作量较大。
下面是一个简单的静态代理示例:
```java
public interface Subject {
void request();
}
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("Real Subject Request");
}
}
public class ProxySubject implements Subject {
private RealSubject realSubject;
public ProxySubject(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
System.out.println("Before Real Subject Request");
realSubject.request();
System.out.println("After Real Subject Request");
}
}
public class Main {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
ProxySubject proxySubject = new ProxySubject(realSubject);
proxySubject.request();
}
}
```
在上面的示例中,Subject 接口定义了一个 request 方法,RealSubject 类是真实对象类,实现了 Subject 接口的 request 方法,ProxySubject 类是代理类,也实现了 Subject 接口的 request 方法,在其方法中调用了 RealSubject 的 request 方法并对其进行了增强。
在 Main 类中,我们创建了一个 RealSubject 对象和一个 ProxySubject 对象,通过调用 proxySubject 的 request 方法,实际上是调用了它持有的 realSubject 的 request 方法,并对其进行了增强。
注意,在这个示例中,RealSubject 类和 ProxySubject 类都实现了 Subject 接口,这是静态代理的一种常见实现方式。