Mode proxy
En mode proxy (Pattern Proxy), une classe de fonctions au nom d'une autre classe. Ce type de modèles de conception appartiennent à modèle structurel.
En mode proxy, nous créons un objet avec un objet existant afin de fournir une interface fonctionnelle au monde extérieur.
introduction
Intention: fournir un agent pour contrôler l' accès à cet objet à d' autres objets.
Principale résolution: accès direct à l'objet a causé des problèmes, tels que: l'objet que vous souhaitez accéder sur la machine distante.Dans les systèmes orientés objet, certains objets pour une raison quelconque (comme la création d'un objet est cher, ou certaines actions nécessitent des contrôles de sécurité, ou d'accès en dehors du processus), il donnera aux utilisateurs un accès direct à la configuration du système ou beaucoup de mal, nous pouvons ajouter une couche pour accéder à cet objet au moment de l'accès à cet objet.
Quand l'utiliser: lorsque vous voulez faire quelque chose pour contrôler l' accès à une classe.
Comment fixer: ajouter la couche intermédiaire.
Le code clé: lien avec les combinaisons de classe proxy.
Exemples d'application: 1, Windows raccourcis à l' intérieur.2, le cochon est allé à haute Cuilan changement résultat Monkey, peut être compris: l'apparence Cuilan haute résumé, haute Turquoise Blue I and Monkey implémente cette interface, Pig accès haute Cuilan quand voit pas le Roi des Singes, de sorte que le Roi Singe est un haut Cuilan classe proxy. 3, pas nécessairement pour acheter des billets de train à la gare pour acheter, vous pouvez aussi aller dans les points de vente. 4, un chèque ou un certificat de dépôt bancaire est un compte proxy fonds. Vérifiez les transactions sur le marché est utilisé au lieu d'argent, et fournit le contrôle du compte de capital de l'émetteur. 5, le printemps aop.
Avantages: 1, des responsabilités claires.2, une grande évolutivité. 3, intelligent.
Inconvénients: 1, comme entre le client et le thème réel que l'objet proxy, donc un certain type de mode proxy peuvent entraîner plus lente demande de la vitesse de traitement.2, pour atteindre le mode proxy nécessite un travail supplémentaire pour atteindre un certain mode proxy est très complexe.
Scénarios d' utilisation:en fonction de répartir les responsabilités, ont généralement les scénarios d'utilisation suivants: 1, Remote Agent. 2. Alertes. 3, Copy-on-Write agents. 4, la protection (protéger ou Access) l'agent. 5, Agent Cache. 6, pare-feu (Firewall) Agent. 7, synchronisation (synchronisation) Agent. 8, les références intelligentes (Smart Reference) Agent.
Note: La différence entre 1 et adaptateur modes: motif Adapter principaux changements envisagés à l'interface de l' objet, et le mode proxy ne peuvent être modifiés par des agents de l'interface de classe.La différence entre 2 et décorateur modèles: Décorateur pour améliorer la fonctionnalité et le mode proxy doit être contrôlé.
réalisation
Nous allons créer une interfaced'imageet la mise en œuvre de l'interfacedel'imagedes classes d'entités.ProxyImageest une classe proxy, ce qui réduit l' empreinte mémoireRealImageobjets chargés.
ProxyPatternDemo,nous démontrons l'utilisation de la classeProxyImagepour obtenirunobjetdel'imagepour être chargé et affiché sur la demande.
Etape 1
Créer une interface.
Image.java
public interface image { affichage void (); }
Etape 2
Créer classe d'entité qui implémente l'interface.
RealImage.java
public class RealImage implémente l'image { fileName String privé; RealImage publique (String fileName) { this.fileName = fileName; loadFromDisk (fileName); } @Override affichage public void () { System.out.println ( "Résultats" + fileName); } vide loadFromDisk privé (String fileName) { System.out.println ( "Chargement" + fileName); } }
ProxyImage.java
public class ProxyImage implémente l'image { privé RealImage realImage; fileName String privé; ProxyImage publique (String fileName) { this.fileName = fileName; } @Override affichage public void () { if (realImage == null) { realImage = new RealImage (fileName); } realImage.display (); } }
Etape 3
Lorsque demandé, utilisezProxyImagepour obtenir objet de classeRealImage.
ProxyPatternDemo.java
public class ProxyPatternDemo { main (String [] args) {public static void Image image = new ProxyImage ( "de test_10mb.jpg"); // Charger l'image à partir du disque image.display (); System.out.println ( ""); // Les images ne peuvent pas être chargés à partir du disque image.display (); } }
Etape 4
Vérifiez la sortie.
Chargement test_10mb.jpg Affichage test_10mb.jpg Affichage test_10mb.jpg