STRUCTURAL

Facade

Fornire un'interfaccia unificata a un insieme di interfacce in un sottosistema. Facade definisce un'interfaccia di livello superiore che rende il sottosistema più facile da usare.

Il Problema

Quando lavori con librerie complesse o sottosistemi con molte classi interdipendenti, il codice client diventa complicato e fortemente accoppiato.

La Soluzione

Creare una classe facade che fornisce un'interfaccia semplice per le operazioni comuni del sottosistema. Il facade delega le chiamate agli oggetti appropriati del sottosistema.

Struttura

Facade fornisce metodi semplici che delegano a classi del sottosistema complesso. Client usa solo Facade invece di interagire direttamente con il sottosistema.

Partecipanti:
Facade - conosce quali classi del sottosistema sono responsabili per una richiesta
Subsystem classes - implementano funzionalità del sottosistema, gestite da Facade
Client - usa Facade invece di chiamare direttamente le classi del sottosistema
Esempi di Codice

Facade per Home Theater System

Semplificazione dell'interfaccia per un sistema home theater complesso.

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Librerie complesse - jQuery è un facade per DOM API
Framework - Express.js semplifica Node.js HTTP server
Database ORM - Sequelize/TypeORM nascondono complessità SQL
Payment gateways - interfaccia semplice per sistemi di pagamento complessi
Cloud services - SDK che semplificano API complesse (AWS SDK)
Quando Usarlo
Quando vuoi fornire interfaccia semplice a sottosistema complesso
Quando ci sono molte dipendenze tra client e classi di implementazione
Quando vuoi stratificare i sottosistemi
Quando vuoi ridurre accoppiamento tra sottosistemi e client
Quando NON Usarlo
Quando il sottosistema è già semplice
Quando i client hanno bisogno di accesso diretto a funzionalità avanzate
Quando il facade diventa un "god object" con troppe responsabilità