Proxy

Catégorie

Pattern structurel

Problème

Fournir un substitut ou un substitut pour un autre objet afin de contrôler l’accès à celui-ci. Utile lorsque l’accès direct est inapproprié en raison du coût, de la sécurité ou de la complexité.

Solution

  • Créer une classe Proxy qui implémente la même interface que le vrai sujet
  • Le Proxy contrôle l’accès au vrai sujet, ajoutant son propre comportement
  • Le Proxy peut initialiser paresseusement, mettre en cache ou ajouter des vérifications de sécurité

Structure

  • Subject : Interface pour le RealSubject et le Proxy
  • RealSubject : L’objet réel que le Proxy représente
  • Proxy : Maintient une référence au RealSubject ; contrôle l’accès ; ajoute des fonctionnalités
  • Client : Utilise l’interface Subject ; ne sait pas qu’il utilise un Proxy

Avantages clés

  • Accès contrôlé — Peut ajouter de la sécurité, du cache ou de l’initialisation paresseuse
  • Transparence — Le client interagit avec le Proxy comme s’il était l’objet réel
  • Accès distant — Les Proxies permettent l’accès à des objets dans différents espaces d’adressage

Compromis

  • Ajoute une couche supplémentaire qui peut introduire une surcharge de performance
  • Peut devenir complexe avec plusieurs types de Proxy

Quand l’utiliser

  • Vous avez besoin d’une référence plus contrôlée ou sophistiquée à un objet qu’un simple pointeur
  • Vous voulez charger paresseusement des objets coûteux
  • Vous avez besoin d’ajouter du cache, de la journalisation ou du contrôle d’accès

Exemples