mode proxy


Dans le modèle Proxy, une classe représente la fonctionnalité d'une autre classe. Ce type de modèle de conception est un modèle structurel.

En proxy pattern, nous créons des objets avec des objets existants afin de fournir une interface fonctionnelle avec le monde extérieur.

Introduction

Intention : Fournir un proxy pour d'autres objets afin de contrôler l'accès à cet objet.

Résout principalement : Problèmes causés lors de l'accès direct aux objets, par exemple : l'objet auquel accéder est sur une machine distante. Dans les systèmes orientés objet, l'accès direct à certains objets causera beaucoup de problèmes aux utilisateurs ou à la structure du système pour certaines raisons (par exemple, la création d'objets est coûteuse, ou certaines opérations nécessitent un contrôle de sécurité, ou nécessitent des opérations hors processus). accès). Nous pouvons ajouter une couche d'accès à cet objet lors de l'accès à cet objet.

Quand l'utiliser : Vous souhaitez avoir un certain contrôle lors de l'accès à un cours.

Comment résoudre : Ajoutez une couche intermédiaire.

Code clé : Combinaison d'implémentation et de classe proxy.

Exemples d'application : 1. Raccourcis dans Windows. 2. Lorsque Zhu Bajie est allé trouver Gao Cuilan, il s'est avéré être Sun Wukong. Cela peut être compris ainsi : l'apparence de Gao Cuilan a été abstraite, et Gao Cuilan et Sun Wukong ont implémenté cette interface. il ne pouvait pas dire qu'il s'agissait de Sun Wukong, donc Sun Wukong était de la classe Agent de Gao Cuilan. 3. Vous n’êtes pas obligé d’acheter vos billets de train à la gare. Vous pouvez également vous adresser à une agence. 4. Un chèque ou un certificat de dépôt bancaire constitue une procuration pour les fonds du compte. Les chèques sont utilisés à la place des espèces dans les transactions de marché et permettent de contrôler les fonds détenus sur le compte de l'émetteur. 5. printemps aop.

Avantages : 1. Responsabilités claires. 2. Haute évolutivité. 3. Intelligent.

Inconvénients : 1. Puisqu'un objet proxy est ajouté entre le client et le sujet réel, certains types de modes proxy peuvent ralentir la vitesse de traitement des requêtes. 2. La mise en œuvre du mode proxy nécessite un travail supplémentaire et la mise en œuvre de certains modes proxy est très complexe.

Scénarios d'utilisation : Répartis par responsabilités, il existe généralement les scénarios d'utilisation suivants : 1. Agent distant. 2. Agent virtuel. 3. Agent de copie sur écriture. 4. Agent de protection (Protéger ou Accès). 5. Agent de cache. 6. Proxy de pare-feu. 7. Agent de synchronisation. 8. Agent de référence intelligent.

Remarques : 1. La différence entre le modèle d'adaptateur et le modèle d'adaptateur : le modèle d'adaptateur modifie principalement l'interface de l'objet considéré, tandis que le modèle de proxy ne peut pas modifier l'interface du classe proxy. 2. La différence entre le mode décorateur et le mode décorateur : le mode décorateur consiste à améliorer la fonction, tandis que le mode proxy consiste à la contrôler.

Implémentation

Nous allons créer une interface Image et une classe d'entité qui implémente l'interface Image. ProxyImage est une classe proxy qui réduit l'empreinte mémoire du chargement des objets RealImage.

ProxyPatternDemo, notre classe de démonstration utilise ProxyImage pour obtenir l'objet Image à charger et l'afficher selon les besoins.

proxy_pattern_uml_diagram.jpg

Étape 1

Créer une interface.

Image.java

public interface Image {
   void display();
}

Étape 2

Créez une classe d'entité qui implémente l'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

Lorsque demandé, utilisez ProxyImage pour obtenir des objets de la classe 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(); 	
   }
}

Étape 4

Vérifiez la sortie.

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg