📝 Ce que vous apprendrez

  • Qu'est-ce que le modèle de procuration ?
  • Pourquoi et quand l'utiliser ?
  • Comment l'implémenter en Java
  • Analogies avec le monde réel
  • Pièges et bonnes pratiques

🔍 Qu'est-ce que le modèle Proxy ?

Le modèle Proxy fournit un substitut ou un substitut pour un autre objet afin de contrôler l'accès, d'ajouter des fonctionnalités ou de retarder des opérations coûteuses jusqu'à ce qu'elles soient nécessaires.

Pensez à un agent de sécurité (proxy) qui vérifie votre identité avant de vous laisser entrer dans un bâtiment (objet réel).

🧩 Quand l'utiliser ?

Utilisez le modèle Proxy lorsque vous en avez besoin :

  • Contrôle d'accès** (par exemple, authentification, autorisation)
  • Initialisation paresseuse (par exemple, chargement uniquement en cas d'accès)
  • Logging ou caching sans modifier la classe d'origine
  • 🛰️ Proxy à distance pour les objets distribués

🧱 Implémentation Java

👩‍💼 Étape 1 : Définir l'interface du sujet

public interface OfficeInternetAccess {
    void grantInternetAccess();
}

🏢 Étape 2 : Sujet réel

public class RealInternetAccess implements OfficeInternetAccess {
    private String employeeName;

    public RealInternetAccess(String empName) {
        this.employeeName = empName;
    }

    public void grantInternetAccess() {
        System.out.println("Internet access granted to " + employeeName);
    }
}

🛡️ Étape 3 : Classe Proxy

public class ProxyInternetAccess implements OfficeInternetAccess {
    private String employeeName;
    private RealInternetAccess realAccess;

    public ProxyInternetAccess(String empName) {
        this.employeeName = empName;
    }

    public void grantInternetAccess() {
        if (getRole(employeeName) > 4) {
            realAccess = new RealInternetAccess(employeeName);
            realAccess.grantInternetAccess();
        } else {
            System.out.println("No Internet access granted to " + employeeName);
        }
    }

    private int getRole(String empName) {
        // Simulate role check: higher number means higher privileges
        return empName.length(); // just for demo purposes
    }
}

✅ Usage

OfficeInternetAccess access = new ProxyInternetAccess("Alice");
access.grantInternetAccess();

🕶️ Analogie avec le monde réel

  • La carte de crédit** est une procuration pour votre compte bancaire
  • Proxy virtuel : Pensez au chargement d'une image dans un document - vous voyez un espace réservé jusqu'à ce que l'image soit entièrement chargée.
  • Proxy de sécurité** : Panneaux d'administration qui ne sont accessibles qu'au moyen d'identifiants de connexion

⚠️ Les pièges à éviter

  • ❌ Complication excessive avec des mandataires inutiles
  • ❌ Couplage étroit entre le mandataire et le sujet réel
  • ❌ Proxy en faire trop - rester léger et orienté vers un but précis

✅ Meilleures pratiques

  • Définir clairement les responsabilités entre le mandataire et l'objet réel
  • Utiliser des interfaces pour rendre les mandataires interchangeables
  • Concentrez-vous sur la logique du proxy : contrôle d'accès, journalisation, chargement paresseux, etc.

📘 Recap

  • Le modèle de proxy ajoute une couche de contrôle entre le client et l'objet réel.
  • Utile pour la sécurité, le chargement rapide, l'accès à distance et la mise en cache.
  • Real et proxy implémentent la même interface, ce qui les rend interchangeables.