http://www.tutorialspoint.com/design_pattern/proxy_pattern.htm

你好

我希望使用中的示例了解Java中的代理设计模式
上面的链接。在主要方法中,我不了解两者之间的区别:

  //image will be loaded from disk

  image.display();
  System.out.println("");

  //image will not be loaded from disk

  image.display();


这是错字吗?相同的2个image.display()方法如何提供不同的输出?

非常感谢!

最佳答案

这不是错字。如果您在教程中查看ProxyImage的定义,则其状态显然为:


public class ProxyImage implements Image{

   private RealImage realImage;
   private String fileName;

   public ProxyImage(String fileName){
      this.fileName = fileName;
   }

   @Override
   public void display() {
      if(realImage == null){
         realImage = new RealImage(fileName);
      }
      realImage.display();
   }
}



首次调用时,realImage为空,图像将从磁盘加载。之后,加载的图像将存储到image.realImage并显示。在第二次调用中,该映像已经被缓存,因此不需要从磁盘加载。

10-08 00:37