title: Façade pattern
text: # Façade pattern
  
  Letteralmente façade significa "facciata", ed infatti nella programmazione ad oggetti indica un oggetto che permette, attraverso un'interfaccia più semplice, l'accesso a sottosistemi che espongono interfacce complesse e molto diverse tra loro, nonché a blocchi di codice complessi.
  
  Consideriamo, ad esempio, la seguente situazione in cui una classe Client, per realizzare una singola operazione deve accedere ad alcune classi molto differenti tra loro.
  
  L'utilizzo del pattern façade (qui realizzato attraverso la classe Facade) permette di nascondere la complessità dell'operazione, poiché in questo caso la classe Client chiama soltanto il metodo metodoUnico per realizzare la stessa operazione.
  
  Il vantaggio è ancora più evidente se questo pattern viene utilizzato in una libreria software, poiché rende indipendente l'implementazione della classe Client dall'implementazione dei vari oggetti Class1, Class2, etc.
  
  Nelle librerie standard Java (Java 2 Platform, Standard Edition) questo pattern viene spesso usato; considerando ad esempio tutte le classi disponibili per fare il rendering del testo o delle forme geometriche, un programmatore può ignorare tutte queste classi e utilizzare unicamente le classi façade (Font e Graphics) che offrono un'interfaccia più semplice e omogenea.
  
  ## Esempio in Java
  
  Esempio di come un client ("you") interagisca tramite un facade (il "computer") ad un sistema complesso (parti interne come CPU e HardDisk).
  
  