设计模式 代理模式

  • 设计模式 - 代理模式

    代理模式中,一个类表示另一个类的功能。这种设计模式属于结构模式。
    在代理模式中,我们创建具有原始对象的对象,以将其功能与外界联系。
  • 实例

    我们将创建一个Image接口和实现Image接口的具体类。ProxyImage是一个代理类,可以减少RealImage对象加载的内存占用。
    我们的演示类 ProxyPatternDemo,将使用ProxyImage得到一个图片对象加载和显示,因为它需要。
    dp
    第1步 - 创建一个接口。 Image.java
    
    public interface Image {
       void display();
    }
    
    第2步 -创建实现相同接口的具体类。 RealImage.java , ProxyImage.java
    
    public class RealImage implements Image {
    
       private String fileName;
    
       public RealImage(String fileName){
          this.fileName = fileName;
          loadFromDisk(fileName);
       }
    
       @Override
       public void display() {
          System.out.println("Displaying " + fileName);
       }
    
       private void loadFromDisk(String fileName){
          System.out.println("Loading " + fileName);
       }
    }
    
    
    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();
       }
    }
    
    第3步 使用ProxyImage获取RealImage类的对象。
    
    ProxyPatternDemo.java
    
    public class ProxyPatternDemo {
            
       public static void main(String[] args) {
          Image image = new ProxyImage("test_10mb.jpg");
    
          //image will be loaded from disk
          image.display(); 
          System.out.println("");
          
          //image will not be loaded from disk
          image.display();  
       }
    }
    
    步骤4 - 验证输出。
    
    Loading test_10mb.jpg
    Displaying test_10mb.jpg
    
    Displaying test_10mb.jpg