title: Proxy (patron de conception)
text: # Proxy (patron de conception)
  
  En programmation, un proxy est un patron de conception.
  
  Un proxy est une classe se substituant à une autre classe. Par convention et simplicité, le proxy implémente la même interface que la classe à laquelle il se substitue. L'utilisation de ce proxy ajoute une indirection à l'utilisation de la classe à substituer.
  
  ## Usage
  
  Un proxy est utilisé principalement pour contrôler l'accès aux méthodes de la classe substituée. Il est également utilisé pour simplifier l'utilisation d'un objet « complexe » à la base : par exemple, si l'objet doit être manipulé à distance (via un réseau) ou si l'objet est consommateur de temps.
  
  ## Propriétés
  
  * Un proxy est un cas particulier du patron de conception état ;
  * Un proxy implémente une et une seule interface (donc ne fournit qu'une seule classe) ;
  * Un état peut implémenter un nombre quelconque d'interfaces ;
  * Un état est utilisé pour changer dynamiquement d'interface.
  
  ## Types
  
  Il existe 8 différents types de proxy :
  
  * Remote proxy : fournit une référence sur un objet situé sur un espace d'adressage différent, sur la même machine ou sur une autre ;
  * Virtual proxy : retarde l'allocation mémoire des ressources de l'objet jusqu'à son utilisation réelle ;
  * Copy-on-write proxy : fournit une forme de proxy virtuel pour retarder la copie de l'objet jusqu'à demande par la classe utilisatrice, utilisé notamment pour la modification concurrente par différents threads ;
  * Protection (access) proxy : fournit à chaque classe cliente un accès à l'objet avec des niveaux de protection différents ;
  * Firewall proxy : protège l'accès à l'objet par des classes « malveillantes » ou vice-versa ;
  * Synchronization proxy : fournit plusieurs accès à l'objet synchronisé entre différentes classes utilisatrices (cas de threads multiples) ;
  * Smart reference proxy : fournit des actions supplémentaires à chaque accès à l'objet (compteur de références, ...) ;
  * Cache proxy : stocke le résultat d'opérations coûteuse en temps, afin de pouvoir les partager avec les différentes classes utilisatrices .
  