3. Esempio introduttivo (1/2)
• Si consideri la seguente organizzazione delle classi utili per la
creazione e l’invio di messaggi di posta elettronica:
Il client deve conoscere tutte altre classi, le loro
Il client deve conoscere tutte altre classi, le loro
relazioni e l’ordine con il quale istanziarle.
relazioni e l’ordine con il quale istanziarle.
Ingegneria del Software - A.A. 2003/2004
6. Il pattern Façade (1/5)
• Nome Façade [GoF95]
• Synopsis Il pattern Façade semplifica l’utilizzo di un
insieme di oggetti relazionati tra loro,
introducendo un nuovo oggetto che funge da
unica “facciata” per comunicare con i primi.
GoF sintetizza il pattern Façade in questo modo:
“Provide a unified interface to a set of interfaces
in a subsystem. Façade defines a higher-level
interface that makes the subsystem easier to
use”
• Context Cfr. esempio introduttivo
Ingegneria del Software - A.A. 2003/2004
7. Il pattern Façade (2/5)
• Forces - Un client è costretto a conoscere la struttura e
le relazioni di un numero significativo di classi.
Questo aumenta la complessità del client.
- Si introduce una Façade tra le classi ed i client
spostando la complessità all’interno della
Façade.
- Non è necessario che la Façade rappresenti una
barriera impenetrabile per i client. Al contrario,
può essere conveniente che la stessa Façade
preveda la restituzione dei reference degli
oggetti per permetterne un accesso diretto ai
client.
Ingegneria del Software - A.A. 2003/2004
8. Il pattern Façade (3/5)
Solution
Ingegneria del Software - A.A. 2003/2004
9. Il pattern Façade (4/5)
• Consequences
- Il client non è tenuto a conoscere le classi che si
trovano dietro la Façade
- Si disaccoppia il codice del client dagli oggetti che si
trovano dietro la Façade, facilitandone la
manutenzione
- Il client hanno comunque la possibilità di accedere
direttamente agli oggetti dietro la Façade
Ingegneria del Software - A.A. 2003/2004
10. Il pattern Façade (5/5)
• Implementation
- Nel caso in cui si voglia tenere il client all’oscuro del
funzionamento di un sottosistema , le classi che
rappresentano il sottosistema possono essere
implementate come inner class della Façade.
• Java API usage
La classe java.net.URL è un esempio di Façade.
Esercizio: individuare quali classi sono dietro la Façade.
• Code example
Cfr. sorgenti che implementano l’esempio introduttivo.
• Related Patterns
Interface, Law of Demeter.
Ingegneria del Software - A.A. 2003/2004