Wzorce projektowe - wzorzec zastępczy

We wzorcu proxy klasa reprezentuje funkcjonalność innej klasy. Ten typ wzorca projektowego jest objęty wzorem strukturalnym.

We wzorcu proxy tworzymy obiekt posiadający oryginalny obiekt, aby połączyć jego funkcjonalność ze światem zewnętrznym.

Realizacja

Zamierzamy stworzyć interfejs Image i konkretne klasy implementujące interfejs Image . ProxyImage to klasa proxy, która zmniejsza zużycie pamięci podczas ładowania obiektów RealImage .

ProxyPatternDemo , nasza klasa demonstracyjna, użyje ProxyImage, aby pobrać obiekt Image do załadowania i wyświetlenia zgodnie z potrzebami.

Krok 1

Utwórz interfejs.

Image.java

public interface Image {
   void display();
}

Krok 2

Utwórz konkretne klasy implementujące ten sam interfejs.

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();
   }
}

Krok 3

Użyj ProxyImage, aby uzyskać obiekt klasy RealImage, gdy jest to wymagane.

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(); 	
   }
}

Krok 4

Sprawdź dane wyjściowe.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg