代理模式介绍及典型案例

时间:2025-03-28 16:27:34
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; // 定义一个接口 interface Service { void doSomething(); } // 实现该接口的真实对象 class RealService implements Service { @Override public void doSomething() { System.out.println("RealService is doing something."); } } // 定义一个代理类,实现了 InvocationHandler 接口 class ServiceProxy implements InvocationHandler { private final Service realService; public ServiceProxy(Service realService) { this.realService = realService; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 在调用真实对象的方法之前,可以添加额外的逻辑 System.out.println("Before method call."); // 调用真实对象的方法 Object result = method.invoke(realService, args); // 在调用真实对象的方法之后,可以添加额外的逻辑 System.out.println("After method call."); return result; } } public class ProxyPatternExample { public static void main(String[] args) { // 创建真实对象 Service realService = new RealService(); // 创建代理对象 Service proxyService = (Service) Proxy.newProxyInstance( RealService.class.getClassLoader(), new Class[]{Service.class}, new ServiceProxy(realService) ); // 通过代理对象调用方法 proxyService.doSomething(); } }