Patrones de diseño: patrón proxy

En el patrón de proxy, una clase representa la funcionalidad de otra clase. Este tipo de patrón de diseño viene bajo patrón estructural.

En el patrón de proxy, creamos un objeto que tiene un objeto original para interconectar su funcionalidad con el mundo exterior.

Implementación

Vamos a crear una interfaz de imagen y clases concretas implementando la interfaz de imagen . ProxyImage es una clase de proxy para reducir la huella de memoria de la carga de objetos RealImage .

ProxyPatternDemo , nuestra clase de demostración, usará ProxyImage para hacer que un objeto Image se cargue y muestre según sea necesario.

Paso 1

Crea una interfaz.

Image.java

public interface Image {
   void display();
}

Paso 2

Crea clases concretas implementando la misma interfaz.

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

Paso 3

Utilice ProxyImage para obtener el objeto de la clase RealImage cuando sea necesario.

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

Etapa 4

Verifique la salida.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg