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