场景 (1)懒加载:hibernate、mybatis,都可以实现懒加载,这个大家应该都知道了,其实也是基于动态代理思想实现的,对刚查询出来的对象做一个代理。然后去调用getX()方法的时候,再实际执行sql查询出来关联的数据。 (2)远程调用:比如thrift等rpc调用包,都是在本地做一个远程服务的本地代理接口,然后对本地代理接口来调用,然后代理对象发送网络请求调用远程服务的接口

1.代理模式

  1. package com.example.demo.pattern.proxy;
  2. /**
  3. * @author chenchao
  4. * @date 2021/11/9
  5. */
  6. public class ProxyPatternDemo {
  7. public static void main(String[] args) {
  8. Subject subject = new ConcreteSubject();
  9. Subject proxy = new Proxy(subject);
  10. proxy.request();
  11. }
  12. public interface Subject {
  13. void request();
  14. }
  15. public static class ConcreteSubject implements Subject {
  16. @Override
  17. public void request() {
  18. System.out.println("执行请求");
  19. }
  20. }
  21. public static class Proxy implements Subject {
  22. private Subject subject;
  23. public Proxy(Subject subject) {
  24. this.subject = subject;
  25. }
  26. @Override
  27. public void request() {
  28. System.out.println("执行额外的条件判断,拷贝是否要调用subject的request()方法");
  29. boolean invoke = true;
  30. if(invoke) {
  31. subject.request();
  32. }
  33. }
  34. }
  35. }


2.说明

代理模式就是在原有的基础上加一些额外操作