Le modèle de proxy en Java

1. Vue d'ensemble

Le modèle Proxy nous permet de créer un intermédiaire qui agit comme une interface avec une autre ressource , tout en masquant la complexité sous-jacente du composant.

2. Exemple de modèle de proxy

Considérez un objet Java lourd (comme une connexion JDBC ou une SessionFactory ) qui nécessite une configuration initiale.

Nous voulons uniquement que ces objets soient initialisés à la demande, et une fois qu'ils le sont, nous souhaitons les réutiliser pour tous les appels:

Créons maintenant une interface simple et la configuration de cet objet:

public interface ExpensiveObject { void process(); }

Et l'implémentation de cette interface avec une grande configuration initiale:

public class ExpensiveObjectImpl implements ExpensiveObject { public ExpensiveObjectImpl() { heavyInitialConfiguration(); } @Override public void process() { LOG.info("processing complete."); } private void heavyInitialConfiguration() { LOG.info("Loading initial configuration..."); } }

Nous allons maintenant utiliser le modèle Proxy et initialiser notre objet à la demande:

public class ExpensiveObjectProxy implements ExpensiveObject { private static ExpensiveObject object; @Override public void process() { if (object == null) { object = new ExpensiveObjectImpl(); } object.process(); } }

Chaque fois que notre client appelle la méthode process () , il pourra simplement voir le traitement et la configuration initiale restera toujours cachée:

public static void main(String[] args) { ExpensiveObject object = new ExpensiveObjectProxy(); object.process(); object.process(); }

Notez que nous appelons la méthode process () deux fois. Dans les coulisses, la partie des paramètres ne se produira qu'une seule fois - lors de la première initialisation de l'objet.

Pour chaque autre appel suivant, ce modèle ignorera la configuration initiale et seul le traitement se produira:

Loading initial configuration... processing complete. processing complete.

3. Quand utiliser le proxy

Il est important de comprendre comment utiliser un modèle.

Comprendre quand l' utiliser est essentiel.

Parlons du moment où utiliser le modèle Proxy:

  • Lorsque nous voulons une version simplifiée d'un objet complexe ou lourd. Dans ce cas, nous pouvons le représenter avec un objet squelette qui charge l'objet d'origine à la demande, également appelé initialisation paresseuse. Ceci est connu sous le nom de proxy virtuel
  • Lorsque l'objet d'origine est présent dans un espace d'adressage différent, et que nous voulons le représenter localement . Nous pouvons créer un proxy qui fait tout le nécessaire passe-partout, comme la création et la maintenance de la connexion, l'encodage, le décodage, etc., pendant que le client y accède tel qu'il était présent dans son espace d'adressage local. C'est ce qu'on appelle le proxy distant
  • Lorsque nous voulons ajouter une couche de sécurité à l'objet sous-jacent d'origine pour fournir un accès contrôlé basé sur les droits d'accès du client . C'est ce qu'on appelle le proxy de protection

4. Conclusion

Dans cet article, nous avons examiné le modèle de conception de proxy. C'est un bon choix dans les cas suivants:

  • Lorsque nous voulons avoir une version simplifiée d'un objet ou accéder à l'objet de manière plus sécurisée
  • Lorsque nous voulons une version locale d'un objet distant

Le code source complet de cet exemple est disponible à l'adresse over sur GitHub.