java编写两种代理模式
时间: 2023-07-18 21:39:41 浏览: 53
好的,我来分别给您演示一下Java中静态代理和动态代理的实现过程。
静态代理:
首先,定义一个接口,比如说:
```java
public interface Subject {
void request();
}
```
然后,定义一个实现该接口的被代理类,比如说:
```java
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject is handling the request.");
}
}
```
接着,定义一个代理类,实现同样的接口,比如说:
```java
public class ProxySubject implements Subject {
private RealSubject realSubject;
public ProxySubject(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
System.out.println("ProxySubject is handling the request.");
realSubject.request();
}
}
```
最后,在主函数中,可以这样使用:
```java
RealSubject realSubject = new RealSubject();
ProxySubject proxySubject = new ProxySubject(realSubject);
proxySubject.request();
```
动态代理:
首先,定义一个接口,比如说:
```java
public interface Subject {
void request();
}
```
然后,定义一个实现该接口的被代理类,比如说:
```java
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("RealSubject is handling the request.");
}
}
```
接着,定义一个InvocationHandler接口的实现类,比如说:
```java
public class DynamicProxyHandler implements InvocationHandler {
private Object target;
public DynamicProxyHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("DynamicProxyHandler is handling the request.");
Object result = method.invoke(target, args);
return result;
}
}
```
最后,在主函数中,可以这样使用:
```java
RealSubject realSubject = new RealSubject();
InvocationHandler handler = new DynamicProxyHandler(realSubject);
Subject proxySubject = (Subject) Proxy.newProxyInstance(RealSubject.class.getClassLoader(),
RealSubject.class.getInterfaces(), handler);
proxySubject.request();
```