Le Facade Pattern (ou modèle de façade) est un modèle de conception logicielle couramment utilisé avec la programmation orientée objet. Le nom est par analogie à une façade architecturale.
Une façade est un objet qui fournit une interface simplifiée à un corps de code plus important, tel qu’une bibliothèque de classes. Une façade peut :
- rendre une bibliothèque logicielle plus facile à utiliser, à comprendre et à tester, puisque la façade possède des méthodes pratiques pour les tâches courantes;
- rendre la bibliothèque plus lisible, pour la même raison;
- réduire les dépendances du code extérieur sur le fonctionnement interne d’une bibliothèque, puisque la plupart du code utilise la façade, permettant ainsi plus de flexibilité dans le développement du système;
- envelopper une collection d’API mal conçue avec une seule API bien conçue.
Le patron de conception Facade est souvent utilisé lorsqu’un système est très complexe ou difficile à comprendre parce que le système a un grand nombre de classes interdépendantes ou que son code source n’est pas disponible. Ce modèle masque les complexités du système plus vaste et fournit une interface plus simple au client. Il implique généralement une seule classe d’enveloppe qui contient un ensemble de membres requis par le client. Ces membres accèdent au système au nom du client de la façade et cachent les détails de mise en œuvre.
Utilisation
Une façade est utilisée lorsqu’une interface plus facile ou plus simple à un objet sous-jacent est souhaitée. Alternativement, un adaptateur peut être utilisé lorsque le wrapper doit respecter une interface particulière et doit supporter un comportement polymorphe. Un décorateur permet d’ajouter ou de modifier le comportement d’une interface au moment de l’exécution.
Pattern | Intentation |
---|---|
Adaptateur | Convertit une interface en une autre afin qu’elle corresponde à ce que le client attend |
Décorateur | Ajoute dynamiquement de la responsabilité à l’interface en enveloppant le code original |
Facade | Fournit une interface simplifiée |
Le patron de façade est typiquement utilisé lorsque :
- une interface simple est nécessaire pour accéder à un système complexe;
- les abstractions et les implémentations d’un sous-système sont étroitement couplées;
- besoin d’un point d’entrée à chaque niveau de logiciel en couches ; ou
- un système est très complexe ou difficile à comprendre.
Structure
Facade : La classe de façade abstrait les paquets 1, 2 et 3 du reste de l’application.Clients : Les objets utilisent le Patron de Façade pour accéder aux ressources des Packages.
Exemple
C’est un exemple abstrait de la façon dont un client (« vous ») interagit avec une façade (l' »ordinateur ») vers un système complexe (les parties internes de l’ordinateur, comme le CPU et le Disque dur).
/* Complex parts */class CPU { freeze() { /* code here */ } jump(position) { /* code here */ } execute() { /* code here */ }}class Memory { load(position, data) { /* code here */ }}class HardDrive { read(lba, size) { /* code here */ }}/* Facade */class ComputerFacade { constructor() { this.processor = new CPU(); this.ram = new Memory(); this.hd = new HardDrive(); } start() { this.processor.freeze(); this.ram.load(this.BOOT_ADDRESS, this.hd.read(this.BOOT_SECTOR, this.SECTOR_SIZE)); this.processor.jump(this.BOOT_ADDRESS); this.processor.execute(); }}/* Client */let computer = new ComputerFacade();computer.start();
.