模式介绍

代理模式是一种结构型设计模式,它允许您提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。

使用场景

  • 当您需要控制对对象的访问时
  • 当您需要在访问对象时添加额外的逻辑时
  • 当您需要延迟加载对象时

代码示例

// 接口
public interface Subject {
    void request();
}

// 真实主题
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("真实主题处理请求");
    }
}

// 代理类
public class Proxy implements Subject {
    private RealSubject realSubject;

    @Override
    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        preRequest();
        realSubject.request();
        postRequest();
    }

    private void preRequest() {
        System.out.println("代理预处理");
    }

    private void postRequest() {
        System.out.println("代理后处理");
    }
}

优缺点

优点

  • 可以控制对真实对象的访问
  • 可以在访问对象时添加额外的逻辑
  • 可以实现延迟加载

缺点

  • 增加了系统的复杂度
  • 可能会造成请求处理速度变慢
  • 需要额外的工作来实现代理类