《设计模式三》Java代理模式实现
import java.lang.reflect.InvocationHandler; // 导入InvocationHandler接口
import java.lang.reflect.Method; // 导入Method类
import java.lang.reflect.Proxy; // 导入Proxy类
// Subject.java
// 主题接口,定义了请求方法
public interface Subject {
void request();
}
// RealSubject.java
// 真实主题实现类,实现了Subject接口
public class RealSubject implements Subject {
@Override
public void request() {
// 处理请求的具体逻辑
System.out.println("真实主题: 正在处理请求。");
}
}
// DynamicProxy.java
// 动态代理类,实现了InvocationHandler接口
public class DynamicProxy implements InvocationHandler {
private Object target; // 目标对象的引用
// 构造函数,接收目标对象的实例
public DynamicProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 在调用目标对象的方法之前可以做一些额外的操作
System.out.println("动态代理: 在调用真实主题之前。");
Object result = method.invoke(target, args); // 调用目标对象的方法
// 在调用目标对象的方法之后可以做一些额外的操作
System.out.println("动态代理: 在调用真实主题之后。");
return result; // 返回方法的结果
}
}
// Main.java
// 主类,用于测试动态代理模式
public class Main {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject(); // 创建真实主题的实例
// 创建动态代理
Subject proxy = (Subject) Proxy.newProxyInstance(
realSubject.getClass().getClassLoader(), // 类加载器
new Class[]{Subject.class}, // 代理的接口
new DynamicProxy(realSubject) // 动态代理处理器
);
proxy.request(); // 通过代理调用请求
}
}