Facade

Catégorie

Patron structurel

Problème

Fournir une interface simplifiée à une bibliothèque, un framework ou tout autre ensemble complexe de classes. Lorsqu’un système est très complexe ou difficile à utiliser, une facade peut fournir un point d’entrée simple.

Solution

  • Créer une seule classe (la facade) qui enveloppe le sous-système complexe
  • La facade fournit des méthodes simplifiées qui coordonnent la complexité sous-jacente
  • Les clients interagissent uniquement avec la facade, pas directement avec les classes du sous-système

Structure

  • Facade : Sait quelles classes du sous-système sont impliquées ; transmet les demandes vers elles
  • Classes du sous-système : Implémentent la fonctionnalité du sous-système
  • Client : Utilise la facade pour accéder à la fonctionnalité du sous-système

Avantages clés

  • Interface simplifiée — Les clients n’ont pas besoin de comprendre la complexité du sous-système
  • Découplage — Réduit les dépendances entre les clients et le sous-système
  • Meilleure organisation — Peut servir d’interface de haut niveau à une grande base de code

Compromis

  • Peut devenir un god object s’il essaie de simplifier trop de sous-systèmes
  • Peut encourager les clients à le contourner, annulant ainsi son objectif

Quand l’utiliser

  • Vous souhaitez fournir une interface simple à un sous-système complexe
  • Il existe de nombreuses dépendances entre les clients et les classes d’implémentation
  • Vous souhaitez couches vos sous-systèmes pour réduire le couplage

Exemples