定义:

  • 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

    特点:

  • 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用 。(优点)

  • 代理对象可以扩展目标对象的功能。(优点)
  • 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度 。(优点)
  • 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢 。(缺点)
  • 增加了系统的复杂度 (缺点)

    通常适用场景:

  • 远程代理,这种方式通常是为了隐藏目标对象存在于不同地址空间的事实,方便客户端访问。

  • 虚拟代理,这种方式通常用于要创建的目标对象开销很大时。
  • 安全代理,这种方式通常用于控制不同种类客户对真实对象的访问权限。
  • 智能指引,主要用于调用目标对象时,代理附加一些额外的处理功能。
  • 延迟加载,指为了提高系统的性能,延迟对目标的加载。

    demo代码:

  • 真实类 ```java @Data public class Peach{ private String name; private String color; private String box; }

public interface FruitService{ Peach makeFruit(); }

//真实类 public class FruitServiceImpl implements FruitService{ @Override public Peach makeFruit() { Peach peach = new Peach(); peach.setName(“桃子”); peach.setColor(“粉红色”); return peach; } }

  1. - 代理类
  2. ```java
  3. //代理类
  4. public class FruitServiceProxy implements FruitService{
  5. private FruitService fruitService =new FruitServiceImpl();
  6. @Override
  7. public Peach makeFruit() {
  8. System.out.println("开始加工桃子");
  9. Peach peach = fruitService.makeFruit();
  10. System.out.println("加工完成,增加包装");
  11. peach.setBox("包装");
  12. return peach;
  13. }
  14. }
  • 测试
    public static void main(String[] args) {
      FruitServiceProxy proxy =new FruitServiceProxy();
      Peach peach = proxy.makeFruit();
      System.out.println(peach);
    }