Pattern di progettazione - Pattern proxy

Nel modello proxy, una classe rappresenta la funzionalità di un'altra classe. Questo tipo di modello di progettazione rientra nel modello strutturale.

Nel modello proxy, creiamo un oggetto con un oggetto originale per interfacciarne le funzionalità con il mondo esterno.

Implementazione

Creeremo un'interfaccia Image e classi concrete che implementano l' interfaccia Image . ProxyImage è una classe proxy per ridurre il footprint di memoria del caricamento di oggetti RealImage .

ProxyPatternDemo , la nostra classe demo, utilizzerà ProxyImage per ottenere un oggetto Image da caricare e visualizzare come necessario.

Passo 1

Crea un'interfaccia.

Image.java

public interface Image {
   void display();
}

Passo 2

Crea classi concrete che implementano la stessa interfaccia.

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

Passaggio 3

Utilizzare ProxyImage per ottenere l'oggetto della classe RealImage quando richiesto.

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

Passaggio 4

Verifica l'output.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg