1. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Universit`a degli Studi di Roma Tor Vergata
Facolt`a di Scienze Matematiche Fisiche Naturali
Design Patterns
Adriana Farina
Anno Accademico 2012 / 2013
2. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Overview
Overview
Design Patterns
Struttura di un pattern
Classi鍖cazione dei design patterns
Pattern creazionali
Singleton
Prototype
Factory Method
Abstract Factory
Pattern Strutturali
Facade
Pattern Comportamentali
Iterator
Template Method
3. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Altri tipi di pattern
Data Access Object (DAO)
Data Tranfer Object (DTO)
Business Object (BO)
Service Locator
Front Controller
4. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Design Patterns
I design patterns sono soluzioni ricorrenti a problemi comuni nel
campo del software design
I design patterns in ambito informatico vengono formalmente
descritti per la prima volta nel libro Design Patterns: Elements of
Reusable Object-Oriented Software, i cui autori vengono spesso
chiamati la Gang of Four o GoF o Go4
I design patterns NON rappresentano la progettazione completa di
una soluzione, che pu`o essere trasformata direttamente in codice
Essi rappresentano piuttosto la descrizione di come risolvere un
problema che pu`o sorgere in di鍖erenti situazioni. I design patterns
sono una sorta di template rispetto alla soluzione di problemi
ricorrenti in determinati campi dellinformatica
5. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
I design patterns possono velocizzare il processo di sviluppo del
software fornendo paradigmi di programmazione provati e testati
I design patterns forniscono soluzioni generali, documentate in un
formato che non richiede speci鍖che legate ad un particolare problema
6. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Struttura di un pattern
Un pattern pu`o avere una precisa struttura che lo descrive
Struttura di un pattern
nome: identi鍖ca il pattern e deve rappresentarlo il pi`u possibile
problema: rappresenta la descrizione della situazione alla quale si
pu`o applicare il pattern
7. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Struttura di un pattern
soluzione: rappresenta la descrizione degli elementi costitutivi del
progetto con le loro relazioni, senza per`o scendere nei dettagli
implementativi. Quello che si vuole descrivere infatti `e un problema
astratto e la relativa con鍖gurazione di elementi adatta a risolverlo
conseguenze: i risultati e i vincoli derivanti dallapplicazione del
pattern. Essi sono fondamentali, in quanto possono risultare
determinanti nella scelta del pattern stesso: le conseguenze
comprendono considerazioni legate alle risorse computazionali
(tempo e memoria), possono descrivere le implicazioni del pattern
con alcuni linguaggi di programmazione e limpatto di questultimo
con il resto del progetto
8. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Classi鍖cazione dei design patterns
Ci sono diversi criteri per classi鍖care i design patterns, i pi`u comuni
dei quali sono quelli che evidenziano il tipo di problema che si cerca
di risolvere
Nel suo libro, la Gang Of Four individu`o 23 design pattern suddivisi
in 3 categorie
9. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Categorie dei design patterns
Pattern Creazionali: rendono i componenti del sistema che usano
determinati oggetti indipendenti da come tali oggetti sono stati
creati, composti e rappresentati. I pattern creazionali nascondono i
costruttori delle classi e mettono al loro posto dei metodi creando
uninterfaccia
Pattern Strutturali: permettono di riutilizzare oggetti esistenti,
utilizzando lereditariet`a e il polimor鍖smo per comporre interfacce
diverse o implementazioni di una stessa interfaccia. I pattern
strutturali riguardano il modo in cui pi`u oggetti sono collegati tra
loro per formare strutture complesse
Pattern Comportamentali: riguardano lassegnazione di
responsabilit`a agli oggetti, incapsulando il comportamento in un
oggetto e delegando ad esso determinate richieste. I pattern
comportamentali forniscono soluzione alle pi`u comuni tipologie di
interazione tra gli oggetti
12. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
Problema
Bisogna garantire che la classe abbia ununica istanza, accessibile
attraverso un unico punto di ingresso alla classe stessa.
Tipicamente questo si veri鍖ca quando la classe mantiene informazioni che
devono essere condivise da pi`u parti dellapplicazione e non `e corretto
oppure non `e e鍖ciente che queste informazioni siano duplicate
13. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
Soluzione
Si rende il costruttore della classe privato, in modo che non sia possibile
creare direttamente istanze di tale classe.
La classe viene dotata di un metodo static per ottenere ununica istanza,
che viene memorizzata in un campo static privato della classe stessa.
Tuttavia possono esserci alcune variazioni a tale soluzione:
listanza pu`o essere creata allinizializzazione del programma, oppure
la prima volta che viene richiesta
listanza pu`o appartenere a una sottoclasse della classe singleton
(come accade nel Factory Method)
14. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Singleton
Conseguenze
Con il singleton si ha che:
laccesso alla classe `e controllato e avviene attraverso lunica istanza
che pu`o essere creata
non occorre introdurre variabili globali per accedere allunica istanza
`e semplice estendere la classe singleton senza modi鍖care il codice
che usa
`e semplice passare da una singola istanza a pi`u istanze
16. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
Problema
Il tipo degli oggetti da creare deve essere determinato da da unistanza
prototipale, che viene clonata per produrre nuovi oggetti. E necessario
copiare o clonare un oggetto gi`a esistente, piuttosto che istanziarlo e
settarne i valori, in quanto la prima soluzione risulta pi`u e鍖ciente.
Inoltre, si hanno i seguenti requisiti:
il sistema deve essere indipendente da come gli oggetti sono creati,
composti e rappresentati
le classi da istanziare sono speci鍖cate a run-time
le istanze di una classe possono avere solo poche combinazioni di
stati diversi
17. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
Soluzione
Si dichiara una classe astratta dotata di un metodo clone() e di un
dizionario di tutte le classi concrete clonabili. Ogni altra classe per cui
questa classe astratta rappresenta un prototipo: deriva se stessa dalla
classe astratta, registra la propria istanza prototipale, implementa il
metodo clone().
Il client invece di scrivere il codice che invoca loperatore new, chiama
loperatore clone sulla classe astratta, fornendo una stringa che indica la
particolare classe concreta derivata che desidera.
18. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Prototype
Conseguenze
Le conseguenze di questo pattern sono molteplici:
si ha la possibilit`a di aggiungere e/o rimuovere prodotti a run-time.
Prototype permette di di aggiungere la classe di un nuovo prodotto
concreto semplicemente registrandone listanza prototipale presso il
client
permette di speci鍖care nuovi oggetti cambiando valori. Si
de鍖niscono nuovi oggetti istanziando classi esistenti e registrando le
istanze come prototipi di oggetti client.
permette di speci鍖care nuovi oggetti cambiando struttura.
20. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
Problema
Una classe ha bisogno di creare un oggetto (prodotto) che implementa
uninterfaccia, ma non si vuole che dipenda da una speci鍖ca
implementazione concreta tra quelle disponibili.
Un altro caso `e quello in cui una classe vuole delegare alle sottoclassi la
creazione d determinati oggetti.
21. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
Soluzione
Si incapsula la creazione degli oggetti in un metodo.
Il metodo pu`o essere nella stessa classe che deve usare gli oggetti oppure
essere un metodo static di una classe diversa.
Altra soluzione, il metodo pu`o essere abstract, richiedendo quindi che
sia una sottoclasse a de鍖nirne limplementazione, oppure essere concreto
e fornire unimplementazione di default.
22. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Factory Method
Conseguenze
Le sottoclassi hanno agganci (hooks) per estendere il comportamento
della classe base cambiando il tipo di prodotto che viene creato.
Inoltre `e possibile stabilire legami tra gerarchie di classi parallele.
24. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
Problema
Il problema che si vuole risolvere `e per certi versi simile a quello del
factory method. Si ha una classe che ha bisogno di creare un insieme di
oggetti che implementano delle interfacce correlate, ma si vuole evitare
che dipenda da una speci鍖ca implementazione concreta tra quelle
disponibili.
Il sistema deve essere con鍖gurato con famiglie multiple di prodotti
(oggetti), dove una famiglia `e progettata per essere usata nel suo insieme.
Si vuole distribuire una libreria di prodotti rivelando solo le interfacce e
non le classi concrete che le implementano.
25. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
Soluzione
Si de鍖nisce uninterfaccia AbstractFactory con metodi per creare diversi
prodotti e una o pi`u classi concrete che implementano questa interfaccia
in riferimento a una singola famiglia di prodotti.
Quindi, a run-time si costruisce unistanza di una factory concreta che
viene usata per creare i prodotti stessi.
26. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Abstract Factory
Conseguenze
Le conseguenze che derivano dallapplicazione di questo pattern sono:
nasconde le classi concrete: solo la factory sa quale classe concreta
viene istanziata
consente di sostituire facilmente una famiglia di oggetti con unaltra
garantisce che i prodotti usati insieme siano della stessa famiglia
28. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
Problema
Allinterno di uno stesso sistema ci sono sottosistemi complessi, costituiti
da numerose interfacce e classi.
Si vuole rendere le funzioni di un sottosistema, o un sottinsieme di esse,
accessibili in maniera sempli鍖cata, interagendo con una singola classe.
29. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
Soluzione
Si realizza una classe di facciata (facade appunto), istanziata con i
riferimenti agli oggetti che compongono il sottosistema da incapsulare.
Il client vede solo loggetto Facade; le operazioni su questo oggetto
provvedono ad attivare gli oggetti del sottosistema incapsulato.
30. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Facade
Conseguenze
Utilizzando questo pattern, linterazione con il sottosistema incapsulato
diventa pi`u semplice.
Inoltre `e possibile modi鍖care tale sottosistema senza modi鍖care
linterfaccia del Facade.
Tuttavia, non sempre tutte le funzionalit`a del sottosistema incapsulato
sono accessibili attraverso loggetto Facade: in alcune situazioni il client
deve comunque accedere alle funzioni di basso livello fornite direttamente
dalle classi del sottosistema.
32. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Problema
Molte strutture dati, come collezioni o contenitori, rappresentano
aggregati di oggetti.
Meccanismi di accesso che sono estremamente e鍖cienti per una struttura
dati possono rivelarsi estremamente ine鍖cienti per unaltra.
Quello che si vuole `e consentire al client di un aggregato di accedere
allelenco degli oggetti in esso contenuti senza dipendere dalla struttura
dati e鍖ettivamente utilizzata per implementare laggregato stesso.
33. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Soluzione
Si de鍖nisce uninterfaccia Iterator che rappresenta in maniera astratta
una posizione allinterno dellaggregato. Literatore fornisce metodi per
veri鍖care se ci sono altri elementi da esaminare, accedere allelemento che
si trova nella posizione attualmente scandita e per passare alla posizione
successiva.
Limplementazione dellaggregato `e associata a unimplementazione
concreta delliteratore, che il client pu`o ottenere attraverso un Factory
Method.
34. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Iterator
Conseguenze
Come conseguenza della presenza degli iteratori, si ha che il client di una
collezione di oggetti pu`o accedere in maniera e鍖ciente ai contenuti della
collezione senza dipendere dalla conoscenza della speci鍖ca struttura dati
utilizzata.
35. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
36. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
Problema
Si vuole separare laccesso ai dati dal resto dellapplicazione, al 鍖ne di
proteggere lapplicazione da eventuali modi鍖che allo strato di
persistenza, come ad esempio il cambiamento da un database a un altro.
Quello che si vuole `e implementare meccanismi per accedere e manipolare
i dati in una base di dati riuscendo per`o a disaccoppiare lo strato di
persistenza dal resto dellapplicazione.
Inoltre, si vuole fornire unAPI uniforme per un meccanismo di
persistenza che sia adatta a diversi tipi di sorgenti di dati (RDBMS,
LDAP, OOODB, ...)
37. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
Soluzione
Si usa uno strato intermedio, il Data Access Object (DAO), per astrarre e
incapsulare tutti gli accessi al database. Il Data Access Object gestisce le
connessioni con il database per caricare e salvare i dati.
Tale strato `e costituito da un insieme di classi dotato di metodi che si
occupano di gestire qualsiasi interazione con la sorgente dati.
38. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Access Object (DAO)
Conseguenze
Alcune delle conseguenze dellapplicazione di tale pattern sono:
abilita la trasparenza
rende possibile una pi`u facile migrazione verso altri storage engine
fornisce una visione object-oriented e incapsula gli schemi del
database
organizza tutto il codice che si occupa dellaccesso ai dati in un layer
separato
39. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
40. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Problema
Si vogliono trasferire molti dati lungo pi`u layers di unapplicazione. In
particolare, si vuole che il client possa accedere ai componenti di diversi
layer per recuperare o aggiornare dati.
Inoltre, in uno scenario di invocazione remota, sorge il probema del
network overhead a causa delle numerose chiamate al server, sia per il
recupero dei dati sia per il salvataggio degli stessi.
41. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Soluzione
Utilizzare un Data Transfer Object per incapsulare i dati di business. Una
singola chiamata a un metodo `e usata per inviare e recuperare il Transfer
Object. Quando il cliente richiede dei dati di business, il DTO viene
istanziato e popolato con i rispettivi valori e poi passato al client. Esso
viaggia lungo tutti gli strati dellapplicazione.
42. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Data Transfer Object (DTO)
Conseguenze
Le conseguenze che derivano dallutilizzo dei Data Transfer Objects sono:
riduzione del tra鍖co di rete
sempli鍖cazione delle interfacce remote
riduzione del codice duplicato
trasferimento di una maggior quantit`a di dati in meno chiamate
remote
43. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
44. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
Problema
Si ha unapplicazione con un modello concettuale complesso, dotato di
una logica di business so鍖sticata, con regole di validazione complesse e
oggetti complessi correlati.
Si vuole separare lo stato di business e il relativo comportamento dal
resto dellapplicazione, incrementandone cos`脹 coesione e riusabilit`a .
Inoltre, si vuole evitare la duplicazione del codice.
45. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
Soluzione
Si utilizza un insieme di Business Objects per separare i dati di business
dalla logica di business usando un object model. Si implementano un
insieme di classi che rappresentano un ulteriore strato allinterno
dellapplicazione che incapsulino i dati di business, cos`脹 da separare la
logica di business dai dati di business.
46. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Business Object (BO)
Conseguenze
Tra le conseguenze che derivano dallutilizzo di tale pattern abbiamo:
evita la duplicazione del codice e favorisce la manutenibilit`a dello
stesso
separa la logica di persistenza dalla logica di business
promuove unarchitettura di tipo service-oriented
aggiunge un ulteriore strato di indirezione
47. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
48. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
Problema
Si vuole garantire una modalit`a uniforme e sempli鍖cata di localizzazione
delle risorse, utilizzando un sistema di lookup per i componenti di business
come ad esempio le API JNDI (Java Naming and Directory Interface).
Inoltre di vogliono isolare eventuali operazioni di lookup vendor
dependent e nascondere eventuali problematiche di networking.
49. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
Soluzione
Si usa un Service Locator per implementare e incapsulare i servizi e le
componenti di lookup. Un Service Locator nasconde i dettagli
implementativi dei meccanismi di lookup e incapsula le relative
dipendenze.
50. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Service Locator
Conseguenze
Lutilizzo di questo pattern consente di:
fornire al client un servizio di lookup uniforme
migliorare le performance di rete
migliorare le performance lato client attraverso il caching
51. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
52. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
Problema
Si vuole fornire un punto di accesso centralizzato per la gestione delle
richieste al livello dello strato di presentazione, in modo da sparare la
logica di presentazione da quella di processamento delle richieste stesse.
Inoltre si vuole evitare di avere del codice duplicato e si vuole applicare
una logica comune a pi`u richieste.
53. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
Soluzione
Si utilizza un Front Controller come punto di accesso iniziale per gestire
tutte le richieste connesse tra loro. Il Front Controller centralizza la logica
di controllo che dovrebbe altrimenti essere replicata per ogni richiesta.
54. Overview Design Patterns Pattern Creazionali Pattern Strutturali Pattern Comportamentali Altri pattern
Front Controller
Conseguenze
Le conseguenze che derivano dallutilizzo di tale pattern sono:
centralizzazione del controllo
miglioramento della riusabilit`a
miglioramento della manutenibilit`a
separazione dei ruoli allinterno dellapllicazione