天天看點

代理模式定義實作

定義

在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬于結構型模式。

在代理模式中,我們建立具有現有對象的對象,以便向外界提供功能接口。

實作

我們将建立一個 Image 接口和實作了 Image 接口的實體類。ProxyImage 是一個代理類,減少 RealImage 對象加載的記憶體占用。

ProxyPatternDemo,我們的示範類使用 ProxyImage 來擷取要加載的 Image 對象,并按照需求進行顯示。

代理模式定義實作

image.png

步驟 1
建立一個接口。
Image.java
public interface Image {
   void display();
}
步驟 2
建立實作接口的實體類。
RealImage.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);
   }
}
ProxyImage.java
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.display(); 
      System.out.println("");
      //圖像将無法從磁盤加載
      image.display();  
   }
}
步驟 4
驗證輸出。
Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg
           

繼續閱讀