《设计模式三》Java代理模式实现

时间:2024-10-25 16:18:30
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(); // 通过代理调用请求 } }