java 代理模式
时间: 2024-01-19 19:18:44 浏览: 84
java代理模式
代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问。代理对象充当客户端和目标对象之间的中介,可以在访问目标对象之前或之后执行一些额外的操作。
在Java中,代理模式可以通过使用Java自带的反射包中的类和接口来实现动态代理的功能。主要涉及到三个类:InvocationHandler、Method和Proxy。通过这三个类,可以实现一个动态代理。需要注意的是,JDK动态代理要求被代理的对象必须实现一个接口。
以下是一个简单的示例,演示了如何使用JDK动态代理实现代理模式:
```java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// 定义接口
interface Subject {
void doSomething();
}
// 实现接口的具体类
class RealSubject implements Subject {
public void doSomething() {
System.out.println("RealSubject doSomething");
}
}
// 实现InvocationHandler接口
class MyInvocationHandler implements InvocationHandler {
private Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before doSomething");
Object result = method.invoke(target, args);
System.out.println("After doSomething");
return result;
}
}
public class ProxyDemo {
public static void main(String[] args) {
// 创建目标对象
Subject realSubject = new RealSubject();
// 创建InvocationHandler对象
InvocationHandler handler = new MyInvocationHandler(realSubject);
// 创建代理对象
Subject proxySubject = (Subject) Proxy.newProxyInstance(
realSubject.getClass().getClassLoader(),
realSubject.getClass().getInterfaces(),
handler
);
// 调用代理对象的方法
proxySubject.doSomething();
}
}
```
运行上述代码,输出结果为:
```
Before doSomething
RealSubject doSomething
After doSomething
```
这个示例中,通过创建一个实现InvocationHandler接口的类MyInvocationHandler,来实现对目标对象RealSubject的代理。在代理对象的方法调用前后,可以执行一些额外的操作。
阅读全文