Modèles de conception - Modèle de proxy

Dans le modèle de proxy, une classe représente la fonctionnalité d'une autre classe. Ce type de modèle de conception relève du modèle structurel.

Dans le modèle de proxy, nous créons un objet ayant un objet original pour interfacer ses fonctionnalités avec le monde extérieur.

la mise en oeuvre

Nous allons créer une interface Image et des classes concrètes implémentant l' interface Image . ProxyImage est une classe proxy pour réduire l'empreinte mémoire du chargement des objets RealImage .

ProxyPatternDemo , notre classe de démonstration, utilisera ProxyImage pour obtenir un objet Image à charger et à afficher selon ses besoins.

Étape 1

Créez une interface.

Image.java

public interface Image {
   void display();
}

Étape 2

Créez des classes concrètes mettant en œuvre la même interface.

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

Étape 3

Utilisez ProxyImage pour obtenir l'objet de la classe RealImage si nécessaire.

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

Étape 4

Vérifiez la sortie.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg