肆意姑娘 发表于 2024-3-4 16:20:31

设计模式-署理 模式使用教程

在 Java 中实现署理 模式通常包含 两种方法 :静态署理 和动态署理 。静态署理 是在编译时就已经确定署理 类和真实对象的关系,而动态署理 则是在运行时动态生成署理 类。下面,我会分别解释如何在项目中实践这两种署理 模式。
静态署理


[*]界说 接口:首先界说 一个接口,声明你想要署理 的办法 。
1public interface IService {2    void serve();3}
[*]实现接口:创建一个真实对象类,实现上述接口。
1public class RealService implements IService {2    @Override3    public void serve() {4      System.out.println("Serving something important...");5    }6}
[*]创建署理 类:然后创建一个署理 类,同样实现这个接口,并在内部持有一个真实对象的引用,署理 类可以在挪用 真实对象的办法 前后添加额外的逻辑。
1                public class ProxyService implements IService {2    private IService realService;34    public ProxyService(IService realService) {5      this.realService = realService;6    }78    @Override9    public void serve() {10      System.out.println("Proxy before serving...");11      realService.serve();12      System.out.println("Proxy after serving...");13    }14}
[*]使用署理 :在客户端代码中,使用署理 类来替代真实对象。
1                public class Client {2    public static void main(String[] args) {3      IService realService = new RealService();4      IService proxyService = new ProxyService(realService);5      6      proxyService.serve();7    }8}动态署理

在Java中,动态署理 通常是通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现的。

[*]界说 接口:这一步和静态署理 相同,你需要一个接口。
1public interface IService {2    void serve();3}
[*]实现接口:创建真实对象类,实现接口。
1public class RealService implements IService {2    @Override3    public void serve() {4      System.out.println("Serving something important...");5    }6}
[*]创建挪用 处理器:创建一个InvocationHandler,它界说 了署理 实例的挪用 处理法度模范   。
1public class ProxyInvocationHandler implements InvocationHandler {2    private Object target;34    public ProxyInvocationHandler(Object target) {5      this.target = target;6    }78    @Override9    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {10      System.out.println("Invoking method: " + method.getName());11      Object result = method.invoke(target, args);12      System.out.println("Method executed: " + method.getName());13      return result;14    }15}
[*]使用动态署理 :在客户端代码中,创建真实对象的署理 实例,并通过它挪用 办法 。
1public class Client {2    public static void main(String[] args) {3      IService realService = new RealService();4      IService proxyService = (IService) Proxy.newProxyInstance(5            realService.getClass().getClassLoader(),6            new Class[] { IService.class },7            new ProxyInvocationHandler(realService)8      );9      10      proxyService.serve();11    }12}在上面的动态署理 例子中,Proxy.newProxyInstance办法 创建了一个实现了IService接口的署理 实例,所有对该署理 实例的办法 挪用 都邑 被转发到ProxyInvocationHandler.invoke办法 。
这些是署理 模式在Java项目中的基本实践。在实际的项目中,署理 模式经常 用于拜访 控制、懒加载、日志记录、性能计数、事务处理等场景。
页: [1]
查看完整版本: 设计模式-署理 模式使用教程