原文: https://javatutorial.net/java-proxy-design-pattern-example

本文介绍了 Java 中的代理设计模式。

代理设计模式是“四人帮”设计模式中的基本计划设计。 辅助结构设计管理如何确认对象之间的连接以改进计划。

代理设计模式如何工作?

代理模式为另一个对象提供代理或占位符,以控制对其的访问。 在计算机编程中,代理设计是产品配置设计。 代理在其最广泛的结构中是充当与其他事物的接口的类。

代理可以连接任何东西:系统关联,内存中的巨大对象,记录或其他昂贵或难以复制的资产。 简而言之,代理是客户调用的包装器或运算符对象,以在后台访问真正的服务对象。 中介的使用基本上可以发送给正品,也可以提供更多的理由。 在代理中,可以授予其他用户的权限,例如,保留对正品项目的活动严重影响资产的时间,或者在对正品对象的任务被构想之前检查前提条件。

对于客户而言,代理对象的使用就像利用正品一样,因为两者都实现了相似的接口。

Java 代理设计模式示例 - 图1

代理模式图

现实场景中代理设计模式的实现

我们可以创建一个Image接口,并执行Image接口的实体类。 ProxyImage是一个代理类,用于减少RealImage对象栈的内存印象。

Java 代理设计模式示例 - 图2

Java 示例的代理模式图

Java 中的代理设计模式示例

创建一个接口

Image.java

  1. public interface Image {
  2. void display();
  3. }

创建实现相同接口的具体类。

RealImage.java

  1. public class RealImage implements Image {
  2. private String fileName;
  3. public RealImage(String fileName){
  4. this.fileName = fileName;
  5. loadFromDisk(fileName);
  6. }
  7. @Override
  8. public void display() {
  9. System.out.println("Displaying " + fileName);
  10. }
  11. private void loadFromDisk(String fileName){
  12. System.out.println("Loading " + fileName);
  13. }
  14. }

ProxyImage.java

  1. public class ProxyImage implements Image{
  2. private RealImage realImage;
  3. private String fileName;
  4. public ProxyImage(String fileName){
  5. this.fileName = fileName;
  6. }
  7. @Override
  8. public void display() {
  9. if(realImage == null){
  10. realImage = new RealImage(fileName);
  11. }
  12. realImage.display();
  13. }
  14. }

必要时,使用ProxyImage获取RealImage类的对象。

ProxyPatternDemo.java

  1. public class ProxyPatternDemo {
  2. public static void main(String[] args) {
  3. Image image = new ProxyImage("test_10mb.jpg");
  4. //image will be loaded from disk
  5. image.display();
  6. System.out.println();
  7. //image will not be loaded from disk
  8. image.display();
  9. }
  10. }

验证输出。

  1. Loading test_10mb.jpg
  2. Displaying test_10mb.jpg
  3. Displaying test_10mb.jpg