Intento:
Fornisce una interfaccia unica all’insieme di interfacce presenti in un sistema. Facade definisce una interfaccia di alto livello che genera un sistema più semplice da utilizzare.
Applicabilità:
E’ utile sfruttare questo pattern quando:
- si vuole fornire una interfaccia semplice verso un sotto-sistema complesso, e di norma la maggior parte dei Client sfrutterà tale interfaccia senza addentrarsi nelle complessità del sotto-sistema, cosa che comunque rimane possibile
- ci sono molte dipendenze fra i Client e le classi di implementazione dell’astrazione, l’utilizzo di Facade permette di disaccoppiare i sottositemi dai Client.
- Si vuole creare dei livelli all’interno del sotto-sistema, Facade viene utilizzato per creare un punto di accesso ad ogni livello.
Partecipanti:
- Facade → conosce quale Subsystem classe è responsabile delle richieste, delega le richieste dei Client al sotto-sistema appropriato
- Subsystem classes → implementa le funzionalità di un sotto-sistema, gestisce il lavoro assegnato dall’oggetto Facade, non ha conoscenza di Facade, ciò significa che non ha riferimenti verso tale oggetto
Conseguenze:
- Facade funge da schermo fra i Client e i componenti del sotto-sistema, riducendo il numero di oggetti con i quali i Client devono avere a che fare
- Favorisce un basso livello di accoppiamento fra Client e sotto-sistema, questo permette di modificare i componenti di un sotto-sistema senza toccare i Client. Questa conseguenza è particolarmente utile per sistemi di grosse dimensioni e di alta complessità.
- Facade non nega alla applicazioni di sfruttare le classi del sotto-sistema.









