SlideShare ist ein Scribd-Unternehmen logo
1 von 74
Downloaden Sie, um offline zu lesen
PATTERN	
  ARCHITETTRALI	
  
Pa#ern	
   è	
   un	
   termine	
   inglese	
   che	
   può	
   essere	
   trado>o,	
   a	
   seconda	
  
del	
   contesto,	
   con	
   disegno,	
   modello,	
   schema,	
   schema	
   ricorrente	
  
e,	
   in	
   generale,	
   può	
   essere	
   u@lizzato	
   per	
   indicare	
   una	
   regolarità	
  
che	
   si	
   riscontra	
   all'interno	
   di	
   un	
   insieme	
   di	
   oggeD	
   osserva@	
  
oppure	
  la	
  regolarità	
  che	
  si	
  osserva	
  nello	
  spazio	
  e/o	
  nel	
  tempo	
  in	
  
determina@	
  fenomeni	
  dinamici.	
  
fabio.armani	
  
Overview	
  
• 
• 
• 
• 
• 
• 
• 
• 

Analysis	
  pa>erns	
  
Architectural	
  pa>erns	
  
Design	
  pa>erns	
  
Enterprise	
  pa>erns	
  
GRASP	
  pa>erns	
  
Implementa@on	
  pa>erns	
  
J2EE	
  Core	
  pa>erns	
  
SCM	
  pa>erns	
  
Overview	
  
•  Design	
  Pa>ern	
  
–  Stru>ura	
  di	
  un	
  pa>ern	
  	
  
–  Classificazione	
  dei	
  design	
  pa>ern	
  	
  
Design	
  Pa>erns	
  
•  I	
  design	
  pa>erns	
  sono	
  soluzioni	
  ricorren@	
  a	
  problemi	
  comuni	
  nel	
  
campo	
  del	
  soTware	
  design	
  	
  
•  I	
  design	
  pa>erns	
  in	
  ambito	
  informa@co	
  vengono	
  formalmente	
  
descriD	
  per	
  la	
  prima	
  volta	
  nel	
  libro	
  Design	
  Pa*erns:	
  Elements	
  of	
  
Reusable	
  Object-­‐Oriented	
  So<ware,	
  i	
  cui	
  autori	
  vengono	
  spesso	
  
chiama@	
  la	
  Gang	
  of	
  Four	
  o	
  GoF	
  o	
  Go4	
  
•  I	
  design	
  pa>erns	
  NON	
  rappresentano	
  la	
  proge>azione	
  completa	
  di	
  
una	
  soluzione,	
  che	
  può	
  essere	
  trasformata	
  dire>amente	
  in	
  codice	
  	
  
•  Essi	
  rappresentano	
  piu>osto	
  la	
  descrizione	
  di	
  come	
  risolvere	
  un	
  
problema	
  che	
  può	
  	
  sorgere	
  in	
  differen@	
  situazioni.	
  I	
  design	
  pa>erns	
  
sono	
  una	
  sorta	
  di	
  template	
  rispe>o	
  alla	
  soluzione	
  di	
  problemi	
  
ricorren@	
  in	
  determina@	
  campi	
  dell’informa@ca	
  
Design	
  Pa>erns	
  
•  I	
  design	
  pa>erns	
  possono	
  velocizzare	
  il	
  processo	
  di	
  sviluppo	
  del	
  
soTware	
  fornendo	
  paradigmi	
  di	
  programmazione	
  prova@	
  e	
  testa@	
  	
  
•  I	
  design	
  pa>erns	
  forniscono	
  soluzioni	
  generali,	
  documentate	
  in	
  un	
  
formato	
  che	
  non	
  richiede	
  specifiche	
  legate	
  ad	
  un	
  par@colare	
  
problema	
  	
  
•  I	
  design	
  pa>erns	
  cos@tuiscono	
  un	
  veicolo	
  per	
  la	
  comunicazione	
  
inerente	
  la	
  proge>azione	
  e	
  le	
  archite>ure	
  soTware	
  
Design	
  Pa>erns	
  >	
  libri	
  
Stru>ura	
  di	
  un	
  pa>ern	
  
•  Un	
  pa>ern	
  può	
  avere	
  una	
  precisa	
  stru>ura	
  che	
  lo	
  descrive	
  
Stru>ura	
  di	
  un	
  pa>ern	
  
•  nome:	
  iden@fica	
  il	
  pa>ern	
  e	
  deve	
  rappresentarlo	
  il	
  più	
  
possibile	
  (es:	
  Factory)	
  
•  descrizione:	
  una	
  breve	
  descrizione	
  dell’obbieDvo	
  del	
  pa>ern,	
  
corrispondente	
  in	
  quasi	
  tuD	
  i	
  casi	
  al	
  “intent”	
  del	
  libro	
  di	
  GoF	
  	
  
•  problema:	
  rappresenta	
  la	
  descrizione	
  della	
  situazione	
  alla	
  
quale	
  si	
  può	
  applicare	
  il	
  pa>ern	
  	
  
•  soluzione:	
  rappresenta	
  la	
  descrizione	
  degli	
  elemen@	
  cos@tu@vi	
  
del	
  proge>o	
  con	
  le	
  loro	
  relazioni,	
  senza	
  però	
  scendere	
  nei	
  
de>agli	
  implementa@vi.	
  Quello	
  che	
  si	
  vuole	
  descrivere	
  infaD	
  
è	
  un	
  problema	
  astra>o	
  e	
  la	
  rela@va	
  configurazione	
  di	
  
elemen@	
  ada>a	
  a	
  risolverlo	
  	
  
Stru>ura	
  di	
  un	
  pa>ern	
  
•  stru5ura	
  del	
  pa5ern:	
  diagramma	
  di	
  classi	
  in	
  UML	
  della	
  
stru>ura	
  generica	
  del	
  pa>ern	
  
•  applicazione	
  del	
  pa5ern:	
  offre	
  un	
  diagramma	
  UML	
  delle	
  classi	
  
del	
  problema,	
  presenta	
  l’abbinamento	
  delle	
  classi	
  del	
  
problema	
  con	
  le	
  classi	
  che	
  descrivono	
  la	
  stru>ura	
  conce>uale	
  
del	
  pa>ern,	
  descrive	
  l’implementazione	
  del	
  il	
  codice	
  Java,	
  e	
  
presenta	
  e	
  commenta	
  gli	
  output	
  dell’esecuzione	
  
•  osservazioni	
  sull’implementazione	
  in	
  Java:	
  presenta	
  gli	
  aspeD	
  
par@colari	
  che	
  riguardano	
  l’implementazione	
  del	
  pa>ern	
  in	
  
Java	
  
Stru>ura	
  di	
  un	
  pa>ern	
  
•  conseguenze:	
  i	
  risulta@	
  e	
  i	
  vincoli	
  derivan@	
  dall’applicazione	
  
del	
  pa>ern.	
  Essi	
  sono	
  fondamentali,	
  in	
  quanto	
  possono	
  
risultare	
  determinan@	
  nella	
  scelta	
  del	
  pa>ern	
  stesso:	
  le	
  
conseguenze	
  comprendono	
  considerazioni	
  legate	
  alle	
  risorse	
  
computazionali	
  (tempo	
  e	
  memoria),	
  possono	
  descrivere	
  le	
  
implicazioni	
  del	
  pa>ern	
  con	
  alcuni	
  linguaggi	
  di	
  
programmazione	
  e	
  l’impa>o	
  di	
  quest’ul@mo	
  con	
  il	
  resto	
  del	
  
proge>o	
  	
  
Classificazione	
  dei	
  design	
  pa>ern	
  
•  Ci	
  sono	
  diversi	
  criteri	
  per	
  classificare	
  i	
  design	
  
pa>erns,	
  i	
  più	
  comuni	
  dei	
  quali	
  sono	
  quelli	
  che	
  
evidenziano	
  il	
  @po	
  di	
  problema	
  che	
  si	
  cerca	
  di	
  
risolvere	
  	
  
•  Nel	
  suo	
  libro,	
  la	
  Gang	
  Of	
  Four	
  individuò	
  23	
  
design	
  pa>ern	
  suddivisi	
  in	
  tre	
  categorie.	
  :	
  
stru>urali,	
  creazionali	
  e	
  comportamentali	
  
	
  
PATTERN	
  CREAZIONALI	
  
Classificazione	
  dei	
  design	
  pa>ern	
  
•  Pa*ern	
  Creazionali:	
  rendono	
  i	
  componen@	
  del	
  
sistema	
  che	
  usano	
  determina@	
  oggeD	
  indipenden@	
  
da	
  come	
  tali	
  oggeD	
  sono	
  sta@	
  crea@,	
  compos@	
  e	
  
rappresenta@.	
  
•  I	
  pa>ern	
  creazionali	
  nascondono	
  i	
  costru>ori	
  delle	
  
classi	
  e	
  me>ono	
  al	
  loro	
  posto	
  dei	
  metodi	
  creando	
  
un’interfaccia.	
  
•  In	
  questo	
  modo	
  si	
  possono	
  u@lizzare	
  oggeD	
  senza	
  
sapere	
  come	
  sono	
  implementa@.	
  
Pa>ern	
  creazionali	
  
•  L'Abstract	
  factory	
  (le>eralmente,	
  "fabbrica	
  astra>a")	
  fornisce	
  
un'interfaccia	
  per	
  creare	
  famiglie	
  di	
  oggeD	
  connessi	
  o	
  dipenden@	
  tra	
  loro,	
  
in	
  modo	
  che	
  non	
  ci	
  sia	
  necessità	
  da	
  parte	
  degli	
  u@lizzatori	
  di	
  specificare	
  i	
  
nomi	
  delle	
  classi	
  concrete	
  all'interno	
  del	
  proprio	
  codice.	
  
•  Il	
  Builder	
  ("costru>ore")	
  separa	
  la	
  costruzione	
  di	
  un	
  ogge>o	
  complesso	
  
dalla	
  sua	
  rappresentazione,	
  in	
  modo	
  che	
  il	
  processo	
  di	
  costruzione	
  stesso	
  
possa	
  creare	
  diverse	
  rappresentazioni.	
  
•  Il	
  Factory	
  method	
  ("metodo	
  fabbrica")	
  fornisce	
  un'interfaccia	
  per	
  creare	
  
un	
  ogge>o,	
  ma	
  lascia	
  che	
  le	
  so>oclassi	
  decidano	
  quale	
  ogge>o	
  istanziare.	
  
Pa>ern	
  creazionali	
  
•  La	
  Lazy	
  ini?aliza?on	
  ("inizializzazione	
  pigra")	
  è	
  la	
  taDca	
  di	
  istanziare	
  un	
  
ogge>o	
  solo	
  nel	
  momento	
  in	
  cui	
  deve	
  essere	
  usato	
  per	
  la	
  prima	
  volta.	
  È	
  
u@lizzato	
  spesso	
  insieme	
  al	
  pa>ern	
  factory	
  method.	
  
•  Il	
  Prototype	
  ("proto@po")	
  perme>e	
  di	
  creare	
  nuovi	
  oggeD	
  clonando	
  un	
  
ogge>o	
  iniziale,	
  o	
  proto@po.	
  
•  Il	
  Singleton	
  ("singole>o")	
  ha	
  lo	
  scopo	
  di	
  assicurare	
  che	
  di	
  una	
  classe	
  possa	
  
essere	
  creata	
  una	
  sola	
  istanza.	
  
PATTERN	
  STRUTTURALI	
  
Classificazione	
  dei	
  design	
  pa>ern	
  
•  Pa*ern	
  Stru*urali:	
  perme>ono	
  di	
  riu@lizzare	
  
oggeD	
  esisten@,	
  u@lizzando	
  l’ereditarietà	
  e	
  il	
  
polimorfismo	
  per	
  comporre	
  interfacce	
  diverse	
  
o	
  implementazioni	
  di	
  una	
  stessa	
  interfaccia.	
  
•  I	
  pa>ern	
  stru>urali	
  riguardano	
  il	
  modo	
  in	
  cui	
  
più	
  oggeD	
  sono	
  collega@	
  tra	
  loro	
  per	
  formare	
  
stru>ure	
  complesse.	
  
Pa>ern	
  stru>urali	
  
•  L'Adapter	
  ("ada>atore")	
  converte	
  l'interfaccia	
  di	
  una	
  classe	
  in	
  una	
  
interfaccia	
  diversa.	
  
•  Bridge	
  ("ponte")	
  perme>e	
  di	
  separare	
  l'astrazione	
  di	
  una	
  classe	
  dalla	
  sua	
  
implementazione,	
  per	
  perme>ere	
  loro	
  di	
  variare	
  indipendentemente.	
  
•  Il	
  Composite	
  ("composto"),	
  u@lizzato	
  per	
  dare	
  la	
  possibilità	
  all'u@lizzatore	
  
di	
  manipolare	
  gli	
  oggeD	
  in	
  modo	
  uniforme,	
  organizza	
  gli	
  oggeD	
  in	
  una	
  
stru>ura	
  ad	
  albero.	
  
•  Il	
  Container	
  ("contenitore")	
  offre	
  una	
  soluzione	
  alla	
  ro>ura	
  
dell'incapsulamento	
  per	
  via	
  dell'uso	
  dell'ereditarietà.	
  
•  Il	
  Decorator	
  ("decoratore")	
  consente	
  di	
  aggiungere	
  metodi	
  a	
  classi	
  
esisten@	
  durante	
  il	
  run-­‐@me	
  (cioè	
  durante	
  lo	
  svolgimento	
  del	
  programma),	
  
perme>endo	
  una	
  maggior	
  flessibilità	
  nell'aggiungere	
  delle	
  funzionalità	
  agli	
  
oggeD.	
  
•  Extensibility	
  ("estendibilità")	
  
Pa>ern	
  stru>urali	
  
•  Il	
  Façade	
  ("facciata")	
  perme>e,	
  a>raverso	
  un'interfaccia	
  più	
  semplice,	
  
l'accesso	
  a	
  so>osistemi	
  che	
  espongono	
  interfacce	
  complesse	
  e	
  diverse	
  tra	
  
loro.	
  
•  Flyweight	
  ("peso	
  piuma"),	
  che	
  perme>e	
  di	
  separare	
  la	
  parte	
  variabile	
  di	
  
una	
  classe	
  dalla	
  parte	
  che	
  può	
  essere	
  riu@lizzata.	
  
•  Proxy	
  fornisce	
  una	
  rappresentazione	
  di	
  un	
  ogge>o	
  di	
  accesso	
  difficile	
  o	
  
che	
  richiede	
  un	
  tempo	
  importante	
  per	
  l’accesso	
  o	
  creazione.	
  Il	
  Proxy	
  
consente	
  di	
  pos@cipare	
  l’accesso	
  o	
  creazione	
  al	
  momento	
  in	
  cui	
  sia	
  
davvero	
  richiesto.	
  
•  Pipes	
  and	
  filters	
  ("condoD	
  e	
  filtri")	
  
•  Private	
  class	
  data	
  ("da@	
  di	
  classe	
  priva@")	
  
PATTERN	
  COMPORTAMENTALI	
  
Classificazione	
  dei	
  design	
  pa>ern	
  
•  Pa*ern	
  Comportamentali:	
  riguardano	
  
l’assegnazione	
  di	
  responsabilità	
  agli	
  oggeD,	
  
incapsulando	
  il	
  comportamento	
  in	
  un	
  ogge>o	
  
e	
  delegando	
  ad	
  esso	
  determinate	
  richieste.	
  
•  I	
  pa>ern	
  comportamentali	
  forniscono	
  
soluzione	
  alle	
  più	
  comuni	
  @pologie	
  di	
  
interazione	
  tra	
  gli	
  oggeD	
  	
  
Pa>ern	
  comportamentali	
  
•  Chain	
  of	
  Responsibility	
  ("catena	
  di	
  responsabilità")	
  diminuisce	
  
l'accoppiamento	
  fra	
  l'ogge>o	
  che	
  effe>ua	
  una	
  richiesta	
  e	
  quello	
  che	
  la	
  
soddisfa,	
  dando	
  a	
  più	
  oggeD	
  la	
  possibilità	
  di	
  soddisfarla	
  
•  Il	
  Command	
  ("comando")	
  perme>e	
  di	
  isolare	
  la	
  porzione	
  di	
  codice	
  che	
  
effe>ua	
  un'azione	
  dal	
  codice	
  che	
  ne	
  richiede	
  l'esecuzione.	
  
•  Event	
  Listener	
  ("ascoltatore	
  di	
  even@")	
  
•  Hierarchical	
  Visitor	
  ("visitatore	
  di	
  gerarchia")	
  
•  Interpreter	
  ("interprete")	
  dato	
  un	
  linguaggio,	
  definisce	
  una	
  
rappresentazione	
  della	
  sua	
  gramma@ca	
  insieme	
  ad	
  un	
  interprete	
  che	
  
u@lizza	
  questa	
  rappresentazione	
  per	
  l'interpretazione	
  delle	
  espressioni	
  in	
  
quel	
  determinato	
  linguaggio.	
  
•  L'Iterator	
  ("iteratore")	
  risolve	
  diversi	
  problemi	
  connessi	
  all'accesso	
  e	
  alla	
  
navigazione	
  a>raverso	
  gli	
  elemen@	
  di	
  una	
  stru>ura	
  da@,	
  senza	
  esporre	
  i	
  
de>agli	
  dell'implementazione	
  e	
  della	
  stru>ura	
  interna	
  del	
  contenitore.	
  
Pa>ern	
  comportamentali	
  
•  Il	
  Mediator	
  ("mediatore")	
  si	
  interpone	
  nelle	
  comunicazioni	
  tra	
  oggeD,	
  allo	
  
scopo	
  di	
  aggiornare	
  lo	
  stato	
  del	
  sistema	
  quando	
  uno	
  qualunque	
  di	
  essi	
  
comunica	
  un	
  cambiamento	
  del	
  proprio	
  stato.	
  
•  Il	
  design	
  pa>ern	
  Memento	
  ("promemoria")	
  è	
  l'operazione	
  di	
  estrarre	
  lo	
  
stato	
  interno	
  di	
  un	
  ogge>o,	
  senza	
  violarne	
  l'incapsulazione,	
  e	
  
memorizzarlo	
  per	
  poterlo	
  ripris@nare	
  in	
  un	
  momento	
  successivo.	
  
•  L'Observer	
  ("osservatore")	
  definisce	
  una	
  dipendenza	
  uno	
  a	
  mol@	
  fra	
  
oggeD	
  diversi,	
  in	
  maniera	
  tale	
  che	
  se	
  un	
  ogge>o	
  cambia	
  il	
  suo	
  stato,	
  tuD	
  
gli	
  oggeD	
  dipenden@	
  vengono	
  no@fica@	
  del	
  cambiamento	
  avvenuto	
  e	
  
possono	
  aggiornarsi.	
  
•  Single-­‐serving	
  Visitor	
  
Pa>ern	
  comportamentali	
  
•  State	
  ("stato")	
  perme>e	
  ad	
  un	
  ogge>o	
  di	
  cambiare	
  il	
  suo	
  comportamento	
  
al	
  cambiare	
  di	
  un	
  suo	
  stato	
  interno.	
  
•  Lo	
  Strategy	
  ("strategia")	
  è	
  u@le	
  in	
  quelle	
  situazioni	
  dove	
  è	
  necessario	
  
modificare	
  dinamicamente	
  gli	
  algoritmi	
  u@lizza@	
  da	
  un'applicazione.	
  
•  Il	
  Template	
  method	
  ("metodo	
  schema")	
  perme>e	
  di	
  definire	
  la	
  stru>ura	
  di	
  
un	
  algoritmo	
  lasciando	
  alle	
  so>oclassi	
  il	
  compito	
  di	
  implementarne	
  alcuni	
  
passi	
  come	
  preferiscono.	
  
•  Il	
  Visitor	
  ("visitatore")	
  perme>e	
  di	
  separare	
  un	
  algoritmo	
  dalla	
  stru>ura	
  di	
  
oggeD	
  compos@	
  a	
  cui	
  è	
  applicato,	
  in	
  modo	
  da	
  poter	
  aggiungere	
  nuovi	
  
comportamen@	
  senza	
  dover	
  modificare	
  la	
  stru>ura	
  stessa.	
  
Design	
  Pa>erns	
  :	
  GoF	
  
•  The	
  Sacred	
  Elements	
  of	
  the	
  Faith	
  
Design	
  Pa>erns	
  everywhere	
  
PATTERN	
  CREAZIONALI	
  
Gof	
  pag.	
  117	
  

SINGLETON	
  
Singleton	
  
Descrizione	
  
•  Il	
  Singleton	
  è	
  un	
  design	
  pa>ern	
  creazionale	
  che	
  ha	
  lo	
  scopo	
  di	
  
garan@re	
  che	
  di	
  una	
  determinata	
  classe	
  venga	
  creata	
  una	
  e	
  
una	
  sola	
  istanza,	
  e	
  di	
  fornire	
  un	
  punto	
  di	
  accesso	
  globale	
  a	
  
tale	
  istanza.	
  
Singleton	
  
Esempio	
  
•  Un	
  applica@vo	
  deve	
  istanziare	
  un	
  ogge>o	
  che	
  ges@sce	
  una	
  
stampante.	
  Questo	
  ogge>o	
  deve	
  essere	
  unico,	
  vale	
  dire,	
  deve	
  
esserci	
  soltanto	
  una	
  sola	
  istanza	
  di	
  esso,	
  altrimen@,	
  
potrebbero	
  risultare	
  dei	
  problemi	
  nella	
  ges@one	
  della	
  risorsa.	
  	
  
•  Il	
  problema	
  è	
  la	
  definizione	
  di	
  una	
  classe	
  che	
  garan@sca	
  la	
  
creazione	
  di	
  un'unica	
  istanza	
  all’interno	
  del	
  programma.	
  	
  
Singleton	
  
Problema	
  
•  Bisogna	
  garan@re	
  che	
  la	
  classe	
  abbia	
  un’unica	
  istanza,	
  
accessibile	
  a>raverso	
  un	
  unico	
  punto	
  di	
  ingresso	
  alla	
  classe	
  
stessa.	
  
•  Tipicamente	
  questo	
  si	
  verifica	
  quando	
  la	
  classe	
  man@ene	
  
informazioni	
  che	
  devono	
  essere	
  condivise	
  da	
  più	
  par@	
  
dell’applicazione	
  e	
  non	
  è	
  corre>o	
  oppure	
  non	
  è	
  efficiente	
  che	
  
queste	
  informazioni	
  siano	
  duplicate	
  	
  
Singleton	
  
Soluzione	
  
•  Il	
  “Singleton”	
  pa>ern	
  definisce	
  una	
  classe	
  della	
  quale	
  è	
  
possibile	
  la	
  istanziazione	
  di	
  un	
  unico	
  ogge>o,	
  tramite	
  
l’invocazione	
  a	
  un	
  metodo	
  della	
  classe,	
  incaricato	
  della	
  
produzione	
  degli	
  oggeD.	
  
•  Le	
  diverse	
  richieste	
  di	
  istanziazione,	
  comportano	
  la	
  
res@tuzione	
  di	
  un	
  riferimento	
  allo	
  stesso	
  ogge>o.	
  	
  
Singleton	
  
Soluzione	
  
•  Si	
  rende	
  il	
  costru>ore	
  della	
  classe	
  privato,	
  in	
  modo	
  che	
  non	
  
sia	
  possibile	
  creare	
  dire>amente	
  istanze	
  di	
  tale	
  classe.	
  
•  La	
  classe	
  viene	
  dotata	
  di	
  un	
  metodo	
  sta?c	
  per	
  o>enere	
  
un’unica	
  istanza,	
  che	
  viene	
  memorizzata	
  in	
  un	
  campo	
  sta?c	
  
privato	
  della	
  classe	
  stessa.	
  Tu>avia	
  possono	
  esserci	
  alcune	
  
variazioni	
  a	
  tale	
  soluzione:	
  	
  
–  l’istanza	
  può	
  essere	
  creata	
  all’inizializzazione	
  del	
  programma,	
  
oppure	
  la	
  prima	
  volta	
  che	
  viene	
  richiesta	
  	
  
–  l’istanza	
  può	
  appartenere	
  a	
  una	
  so>o	
  classe	
  della	
  classe	
  
singleton	
  (come	
  accade	
  nel	
  Factory	
  Method)	
  
Singleton	
  
Stru*ura	
  
	
  
Singleton	
  
Schema	
  del	
  modello	
  
•  Si	
  presenta	
  di	
  seguito	
  una	
  delle	
  implementazioni	
  più	
  semplici	
  
del	
  Singleton:	
  	
  

	
  
	
  
Singleton	
  
PartecipanJ	
  
•  Singleton:	
  classe	
  PrinterSpooler.	
  	
  
–  Definisce	
  un	
  metodo	
  getInstance	
  che	
  res@tuisce	
  un	
  
riferimento	
  alla	
  unica	
  istanza	
  di	
  se	
  stessa.	
  	
  
–  E’	
  responsabile	
  della	
  creazione	
  della	
  propria	
  unica	
  istanza.	
  	
  

	
  
Singleton	
  
Implementazione	
  
•  L'implementazione	
  più	
  semplice	
  di	
  questo	
  pa>ern	
  prevede	
  
che	
  la	
  classe	
  singleton	
  abbia	
  un	
  unico	
  costru>ore	
  privato,	
  in	
  
modo	
  da	
  impedire	
  l'istanziazione	
  dire>a	
  della	
  classe.	
  

	
  
Singleton	
  
Implementazione	
  
	
  

	
  
Singleton	
  
Implementazione	
  mulJ-­‐thread	
  
•  In	
  applicazioni	
  mul@-­‐thread	
  l'u@lizzo	
  di	
  questo	
  pa>ern	
  con	
  la	
  
lazy	
  ini?aliza?on	
  richiede	
  un'a>enzione	
  par@colare:	
  se	
  due	
  
thread	
  tentano	
  di	
  eseguire	
  contemporaneamente	
  il	
  
costru>ore	
  quando	
  la	
  classe	
  non	
  è	
  stata	
  ancora	
  istanziata,	
  
devono	
  entrambi	
  controllare	
  se	
  l'istanza	
  esiste	
  e	
  soltanto	
  uno	
  
deve	
  creare	
  la	
  nuova	
  istanza.	
  

	
  
Singleton	
  
Sincronizzazione	
  esplicita	
  
•  Il	
  modo	
  più	
  semplice	
  per	
  implementare	
  una	
  versione	
  thread-­‐
safe	
  è	
  quello	
  di	
  usare	
  un	
  meccanismo	
  di	
  sincronizzazione	
  
come	
  quello	
  fornito	
  dalla	
  parola	
  chiave	
  synchronized	
  di	
  Java.	
  
•  Tu>avia	
  questo	
  approccio	
  è	
  inefficiente:	
  infaD	
  la	
  
sincronizzazione	
  è	
  u@le	
  solo	
  per	
  la	
  prima	
  inizializzazione,	
  e	
  
cos@tuisce	
  un	
  inu@le	
  overhead	
  nelle	
  successive	
  chiamate	
  al	
  
metodo	
  getter.	
  
	
  

	
  
Singleton	
  
Sincronizzazione	
  esplicita	
  
	
  

	
  
Singleton	
  
Sincronizzazione	
  implicita	
  
•  In	
  alcuni	
  linguaggi	
  è	
  possibile	
  evitare	
  l'overhead	
  di	
  
sincronizzazione	
  sfru>ando	
  quelle	
  peculiarità	
  della	
  lazy	
  
ini?aliza?on	
  che	
  consentono	
  di	
  assicurarsi	
  la	
  presenza	
  del	
  
singleton	
  in	
  memoria	
  all'a>o	
  del	
  suo	
  u@lizzo.	
  
•  Le	
  modalità	
  specifiche	
  possono	
  variare	
  da	
  linguaggio	
  a	
  
linguaggio;	
  ad	
  esempio,	
  in	
  Java	
  è	
  possibile	
  sfru>are	
  il	
  fa>o	
  
che	
  l'inizializzazione	
  di	
  una	
  classe	
  ed	
  il	
  suo	
  caricamento	
  in	
  
memoria,	
  quando	
  avvengono,	
  sono	
  operazioni	
  thread-­‐safe	
  
che	
  comprendono	
  l'inizializzazione	
  di	
  tu>e	
  le	
  variabili	
  sta@che	
  
(a>ribu@)	
  della	
  classe	
  stessa.	
  

	
  
Singleton	
  
Sincronizzazione	
  implicita	
  
	
  

	
  
Singleton	
  
Conseguenze	
  
•  Con	
  il	
  singleton	
  si	
  ha	
  che:	
  	
  
–  l’accesso	
  alla	
  classe	
  è	
  controllato	
  e	
  avviene	
  a>raverso	
  l’unica	
  
istanza	
  che	
  può	
  essere	
  creata	
  	
  
–  non	
  occorre	
  introdurre	
  variabili	
  globali	
  per	
  accedere	
  all’unica	
  
istanza	
  	
  
–  è	
  semplice	
  estendere	
  la	
  classe	
  singleton	
  senza	
  modificare	
  il	
  
codice	
  che	
  usa	
  	
  
–  è	
  semplice	
  passare	
  da	
  una	
  singola	
  istanza	
  a	
  più	
  istanze	
  	
  

	
  
Singleton	
  
CriJche	
  
•  Alcuni	
  autori	
  hanno	
  cri@cato	
  il	
  pa>ern	
  Singleton,	
  osservando	
  
che,	
  con	
  opportune	
  modifiche	
  stru>urali,	
  una	
  istanza	
  singola	
  
può	
  entrare	
  più	
  efficacemente	
  a	
  far	
  parte	
  dell'Ambiente	
  
globale	
  dell'applicazione	
  
ENTERPRISE	
  PATTERN	
  
Enterprise	
  Pa>erns	
  
•  Pa>erns	
  of	
  Enterprise	
  Applica@on	
  Architecture	
  
•  Core	
  J2EE	
  Pa>erns	
  
•  Integra@on	
  Pa>erns	
  
Enterprise	
  Pa>erns	
  >	
  books	
  
Core	
  J2EE	
  Pa>erns	
  
•  Presenta@on	
  Tier	
  
•  Business	
  Tier	
  
•  Integra@on	
  Tier	
  
Core	
  J2EE	
  Pa>erns	
  
•  Presenta@on	
  Tier	
  
– 
– 
– 
– 
– 
– 
– 
– 

Applica@on	
  Controller	
  
Composite	
  View	
  
Context	
  Object	
  
Dispatcher	
  View	
  
Front	
  Controller	
  
Intercep@ng	
  Filter	
  
Service	
  To	
  Worker	
  
View	
  Helper	
  
Core	
  J2EE	
  Pa>erns	
  
•  Business	
  Tier	
  
– 
– 
– 
– 
– 
– 
– 
– 
– 

Applica@on	
  Service	
  
Business	
  Delegate	
  
Business	
  Object	
  
Composite	
  En@ty	
  
Service	
  Locator	
  
Session	
  Façade	
  
Transfer	
  Object	
  (DTO)	
  
Transfer	
  Object	
  Assembler	
  
Value	
  List	
  Handler	
  
Core	
  J2EE	
  Pa>erns	
  
•  Integra@on	
  Tier	
  
– 
– 
– 
– 

Data	
  Access	
  Object	
  (DAO)	
  
Domain	
  Store	
  
Service	
  Ac@vator	
  
Web	
  Service	
  Broker	
  
Presenta@on	
  Tier	
  Pa>ern	
  
–  Applica@on	
  Controller	
  
–  Composite	
  View	
  
–  Context	
  Object	
  
–  Dispatcher	
  View	
  
–  Front	
  Controller	
  
–  Intercep@ng	
  Filter	
  
–  Service	
  To	
  Worker	
  
–  View	
  Helper	
  
PoEAA	
  -­‐	
  pag.	
  117	
  

FRONT	
  CONTROLLER	
  
FRONT	
  CONTROLLER	
  
FRONT CONTROLLER!
Front	
  Controller	
  
Descrizione	
  
•  Consente	
  di	
  ges@re	
  il	
  mapping	
  logico	
  delle	
  risorse	
  	
  
Front	
  Controller	
  
Problema	
  
•  Si	
  vuole	
  fornire	
  un	
  punto	
  di	
  accesso	
  centralizzato	
  per	
  la	
  
ges@one	
  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ù	
  richieste.	
  	
  
Front	
  Controller	
  
Soluzione	
  
•  Si	
  u@lizza	
  un	
  Front	
  Controller	
  come	
  punto	
  di	
  accesso	
  iniziale	
  
per	
  ges@re	
  tu>e	
  le	
  richieste	
  connesse	
  tra	
  loro.	
  
•  Il	
  Front	
  Controller	
  centralizza	
  la	
  logica	
  di	
  controllo	
  che	
  
dovrebbe	
  altrimen@	
  essere	
  replicata	
  per	
  ogni	
  richiesta.	
  	
  
Front	
  Controller	
  
Use to Implement:
•  Logical Resource
Mapping
•  Session Management
•  Audit Logging

Avoid:
•  Physical Resource Mapping
•  Unhandled Mapping in Multyplexed Resource Mapping
strategy
•  Logging of Arbitrary HTTTP Parameters
•  Duplicating Common Logic Across Multiple Front Controllers

Avoid:
•  Invoking Commands
Without Sufficient
Authorization
Front	
  Controller	
  
Front	
  Controller	
  
Front	
  Controller	
  
Front	
  Controller	
  
Conseguenze	
  
•  Le	
  conseguenze	
  che	
  derivano	
  dall’u@lizzo	
  di	
  tale	
  pa>ern	
  sono:	
  
– 
– 
– 
– 

centralizzazione	
  del	
  controllo	
  
miglioramento	
  della	
  riusabilità	
  
miglioramento	
  della	
  manutenibilità	
  
separazione	
  dei	
  ruoli	
  all’interno	
  dell’applicazione	
  	
  

Weitere ähnliche Inhalte

Andere mochten auch

Scaling lean agile agile prage 2014 (armani)
Scaling lean agile   agile prage 2014 (armani)Scaling lean agile   agile prage 2014 (armani)
Scaling lean agile agile prage 2014 (armani)Fabio Armani
 
Scaling Lean Agile - mini iad 2014
Scaling Lean Agile - mini iad 2014Scaling Lean Agile - mini iad 2014
Scaling Lean Agile - mini iad 2014Fabio Armani
 
Business Agility 2017 (final)
Business Agility 2017 (final)Business Agility 2017 (final)
Business Agility 2017 (final)Fabio Armani
 
Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011
Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011
Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011Fabio Armani
 
Chorale 2 the Tao of Change
Chorale 2   the Tao of ChangeChorale 2   the Tao of Change
Chorale 2 the Tao of ChangeFabio Armani
 
Lean Change Management (part II) - IAD 2014
Lean Change Management (part II) - IAD 2014Lean Change Management (part II) - IAD 2014
Lean Change Management (part II) - IAD 2014Fabio Armani
 
Enterprise Flex Using Cairngorm
Enterprise Flex Using CairngormEnterprise Flex Using Cairngorm
Enterprise Flex Using CairngormJaibeer Malik
 
Scrum buts » but Scrum - which is worse?
Scrum buts » but Scrum - which is worse?Scrum buts » but Scrum - which is worse?
Scrum buts » but Scrum - which is worse?Fabio Armani
 

Andere mochten auch (9)

Scaling lean agile agile prage 2014 (armani)
Scaling lean agile   agile prage 2014 (armani)Scaling lean agile   agile prage 2014 (armani)
Scaling lean agile agile prage 2014 (armani)
 
Scaling Lean Agile - mini iad 2014
Scaling Lean Agile - mini iad 2014Scaling Lean Agile - mini iad 2014
Scaling Lean Agile - mini iad 2014
 
Business Agility 2017 (final)
Business Agility 2017 (final)Business Agility 2017 (final)
Business Agility 2017 (final)
 
Jdbc complete
Jdbc completeJdbc complete
Jdbc complete
 
Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011
Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011
Scrumban a Methodology Fusion - Bettersoftware & Codemotion 2011
 
Chorale 2 the Tao of Change
Chorale 2   the Tao of ChangeChorale 2   the Tao of Change
Chorale 2 the Tao of Change
 
Lean Change Management (part II) - IAD 2014
Lean Change Management (part II) - IAD 2014Lean Change Management (part II) - IAD 2014
Lean Change Management (part II) - IAD 2014
 
Enterprise Flex Using Cairngorm
Enterprise Flex Using CairngormEnterprise Flex Using Cairngorm
Enterprise Flex Using Cairngorm
 
Scrum buts » but Scrum - which is worse?
Scrum buts » but Scrum - which is worse?Scrum buts » but Scrum - which is worse?
Scrum buts » but Scrum - which is worse?
 

Ähnlich wie Design patterns - parte 1

Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsMarco Bianchi
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Antonio Musarra
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object OrientedStefano Fago
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Giuseppe Vizzari
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]gioacchinolonardo
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Giacomo Russo
 
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...LeD87
 
5 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/185 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/18Giuseppe Vizzari
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 

Ähnlich wie Design patterns - parte 1 (20)

Lezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design PatternsLezione 00 - Introduzione ai Design Patterns
Lezione 00 - Introduzione ai Design Patterns
 
Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1Corso introduttivo di Design Pattern in Java per Elis - 1
Corso introduttivo di Design Pattern in Java per Elis - 1
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Progetti per l'esame negli ITIS
Progetti per l'esame negli ITISProgetti per l'esame negli ITIS
Progetti per l'esame negli ITIS
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object Oriented
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
 
Corso GOF Design Pattern
Corso GOF Design PatternCorso GOF Design Pattern
Corso GOF Design Pattern
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
 
Corso UML
Corso UMLCorso UML
Corso UML
 
Excel development e sql 1.7
Excel development e sql   1.7Excel development e sql   1.7
Excel development e sql 1.7
 
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
Sviluppo di un prototipo di interfaccia per la verbalizzazione degli esami on...
 
Maven - Aprile 2010
Maven - Aprile 2010Maven - Aprile 2010
Maven - Aprile 2010
 
5 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/185 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/18
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014Catalogo corsi Emerasoft 2013 - 2014
Catalogo corsi Emerasoft 2013 - 2014
 

Mehr von Fabio Armani

Agile Music from the Trenches
Agile Music from the TrenchesAgile Music from the Trenches
Agile Music from the TrenchesFabio Armani
 
Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)
Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)
Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)Fabio Armani
 
Product Values - Ethical Considerations - ver 1.4 (no video).pdf
Product Values - Ethical Considerations - ver 1.4 (no video).pdfProduct Values - Ethical Considerations - ver 1.4 (no video).pdf
Product Values - Ethical Considerations - ver 1.4 (no video).pdfFabio Armani
 
Surfing on the Edge of Chaos
Surfing on the Edge of ChaosSurfing on the Edge of Chaos
Surfing on the Edge of ChaosFabio Armani
 
Agile marketing - beyond it 2021
Agile marketing - beyond it 2021Agile marketing - beyond it 2021
Agile marketing - beyond it 2021Fabio Armani
 
Agile Myths and Pitfalls - 2020 (ver 0.8)
Agile Myths and Pitfalls - 2020 (ver 0.8)Agile Myths and Pitfalls - 2020 (ver 0.8)
Agile Myths and Pitfalls - 2020 (ver 0.8)Fabio Armani
 
Appreciative Inquiry - an overview
Appreciative Inquiry - an overviewAppreciative Inquiry - an overview
Appreciative Inquiry - an overviewFabio Armani
 
Appreciative Inquiry - an introduction
Appreciative Inquiry - an introductionAppreciative Inquiry - an introduction
Appreciative Inquiry - an introductionFabio Armani
 
Mapping the Change - final
Mapping the Change - final Mapping the Change - final
Mapping the Change - final Fabio Armani
 
Manifiesto de Mañana Programming
Manifiesto de Mañana Programming Manifiesto de Mañana Programming
Manifiesto de Mañana Programming Fabio Armani
 
From Manana Programming to Zen Delivery (final) - 2019
From Manana Programming to Zen Delivery (final) - 2019From Manana Programming to Zen Delivery (final) - 2019
From Manana Programming to Zen Delivery (final) - 2019Fabio Armani
 
Human Side of Agile (Agile Venture 2019)
Human Side of Agile (Agile Venture 2019)Human Side of Agile (Agile Venture 2019)
Human Side of Agile (Agile Venture 2019)Fabio Armani
 
Psychological Safety - ABD19
Psychological Safety - ABD19Psychological Safety - ABD19
Psychological Safety - ABD19Fabio Armani
 
Enterprise lean agile 2018 challenges ver 0.3
Enterprise lean agile 2018   challenges ver 0.3Enterprise lean agile 2018   challenges ver 0.3
Enterprise lean agile 2018 challenges ver 0.3Fabio Armani
 
Lean Change Management (part I) - IAD 2014
Lean Change Management (part I) - IAD 2014Lean Change Management (part I) - IAD 2014
Lean Change Management (part I) - IAD 2014Fabio Armani
 
Mapping the Value (Agilia Budapest 2016)
Mapping the Value (Agilia Budapest 2016)Mapping the Value (Agilia Budapest 2016)
Mapping the Value (Agilia Budapest 2016)Fabio Armani
 
Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Fabio Armani
 
Back to Agile - Codemotion 2013
Back to Agile - Codemotion 2013  Back to Agile - Codemotion 2013
Back to Agile - Codemotion 2013 Fabio Armani
 
User Stories writing - Bettersoftware 2012
User Stories writing - Bettersoftware 2012User Stories writing - Bettersoftware 2012
User Stories writing - Bettersoftware 2012Fabio Armani
 

Mehr von Fabio Armani (19)

Agile Music from the Trenches
Agile Music from the TrenchesAgile Music from the Trenches
Agile Music from the Trenches
 
Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)
Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)
Alien eXperience - FuffaDay 2022 (Fabio Armani & Virginia Capoluongo)
 
Product Values - Ethical Considerations - ver 1.4 (no video).pdf
Product Values - Ethical Considerations - ver 1.4 (no video).pdfProduct Values - Ethical Considerations - ver 1.4 (no video).pdf
Product Values - Ethical Considerations - ver 1.4 (no video).pdf
 
Surfing on the Edge of Chaos
Surfing on the Edge of ChaosSurfing on the Edge of Chaos
Surfing on the Edge of Chaos
 
Agile marketing - beyond it 2021
Agile marketing - beyond it 2021Agile marketing - beyond it 2021
Agile marketing - beyond it 2021
 
Agile Myths and Pitfalls - 2020 (ver 0.8)
Agile Myths and Pitfalls - 2020 (ver 0.8)Agile Myths and Pitfalls - 2020 (ver 0.8)
Agile Myths and Pitfalls - 2020 (ver 0.8)
 
Appreciative Inquiry - an overview
Appreciative Inquiry - an overviewAppreciative Inquiry - an overview
Appreciative Inquiry - an overview
 
Appreciative Inquiry - an introduction
Appreciative Inquiry - an introductionAppreciative Inquiry - an introduction
Appreciative Inquiry - an introduction
 
Mapping the Change - final
Mapping the Change - final Mapping the Change - final
Mapping the Change - final
 
Manifiesto de Mañana Programming
Manifiesto de Mañana Programming Manifiesto de Mañana Programming
Manifiesto de Mañana Programming
 
From Manana Programming to Zen Delivery (final) - 2019
From Manana Programming to Zen Delivery (final) - 2019From Manana Programming to Zen Delivery (final) - 2019
From Manana Programming to Zen Delivery (final) - 2019
 
Human Side of Agile (Agile Venture 2019)
Human Side of Agile (Agile Venture 2019)Human Side of Agile (Agile Venture 2019)
Human Side of Agile (Agile Venture 2019)
 
Psychological Safety - ABD19
Psychological Safety - ABD19Psychological Safety - ABD19
Psychological Safety - ABD19
 
Enterprise lean agile 2018 challenges ver 0.3
Enterprise lean agile 2018   challenges ver 0.3Enterprise lean agile 2018   challenges ver 0.3
Enterprise lean agile 2018 challenges ver 0.3
 
Lean Change Management (part I) - IAD 2014
Lean Change Management (part I) - IAD 2014Lean Change Management (part I) - IAD 2014
Lean Change Management (part I) - IAD 2014
 
Mapping the Value (Agilia Budapest 2016)
Mapping the Value (Agilia Budapest 2016)Mapping the Value (Agilia Budapest 2016)
Mapping the Value (Agilia Budapest 2016)
 
Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)Agile requirements - alla ricerca del filo rosso (iad 2013)
Agile requirements - alla ricerca del filo rosso (iad 2013)
 
Back to Agile - Codemotion 2013
Back to Agile - Codemotion 2013  Back to Agile - Codemotion 2013
Back to Agile - Codemotion 2013
 
User Stories writing - Bettersoftware 2012
User Stories writing - Bettersoftware 2012User Stories writing - Bettersoftware 2012
User Stories writing - Bettersoftware 2012
 

Design patterns - parte 1

  • 1.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. Pa#ern   è   un   termine   inglese   che   può   essere   trado>o,   a   seconda   del   contesto,   con   disegno,   modello,   schema,   schema   ricorrente   e,   in   generale,   può   essere   u@lizzato   per   indicare   una   regolarità   che   si   riscontra   all'interno   di   un   insieme   di   oggeD   osserva@   oppure  la  regolarità  che  si  osserva  nello  spazio  e/o  nel  tempo  in   determina@  fenomeni  dinamici.  
  • 9. Overview   •  •  •  •  •  •  •  •  Analysis  pa>erns   Architectural  pa>erns   Design  pa>erns   Enterprise  pa>erns   GRASP  pa>erns   Implementa@on  pa>erns   J2EE  Core  pa>erns   SCM  pa>erns  
  • 10. Overview   •  Design  Pa>ern   –  Stru>ura  di  un  pa>ern     –  Classificazione  dei  design  pa>ern    
  • 11. Design  Pa>erns   •  I  design  pa>erns  sono  soluzioni  ricorren@  a  problemi  comuni  nel   campo  del  soTware  design     •  I  design  pa>erns  in  ambito  informa@co  vengono  formalmente   descriD  per  la  prima  volta  nel  libro  Design  Pa*erns:  Elements  of   Reusable  Object-­‐Oriented  So<ware,  i  cui  autori  vengono  spesso   chiama@  la  Gang  of  Four  o  GoF  o  Go4   •  I  design  pa>erns  NON  rappresentano  la  proge>azione  completa  di   una  soluzione,  che  può  essere  trasformata  dire>amente  in  codice     •  Essi  rappresentano  piu>osto  la  descrizione  di  come  risolvere  un   problema  che  può    sorgere  in  differen@  situazioni.  I  design  pa>erns   sono  una  sorta  di  template  rispe>o  alla  soluzione  di  problemi   ricorren@  in  determina@  campi  dell’informa@ca  
  • 12. Design  Pa>erns   •  I  design  pa>erns  possono  velocizzare  il  processo  di  sviluppo  del   soTware  fornendo  paradigmi  di  programmazione  prova@  e  testa@     •  I  design  pa>erns  forniscono  soluzioni  generali,  documentate  in  un   formato  che  non  richiede  specifiche  legate  ad  un  par@colare   problema     •  I  design  pa>erns  cos@tuiscono  un  veicolo  per  la  comunicazione   inerente  la  proge>azione  e  le  archite>ure  soTware  
  • 13. Design  Pa>erns  >  libri  
  • 14. Stru>ura  di  un  pa>ern   •  Un  pa>ern  può  avere  una  precisa  stru>ura  che  lo  descrive  
  • 15. Stru>ura  di  un  pa>ern   •  nome:  iden@fica  il  pa>ern  e  deve  rappresentarlo  il  più   possibile  (es:  Factory)   •  descrizione:  una  breve  descrizione  dell’obbieDvo  del  pa>ern,   corrispondente  in  quasi  tuD  i  casi  al  “intent”  del  libro  di  GoF     •  problema:  rappresenta  la  descrizione  della  situazione  alla   quale  si  può  applicare  il  pa>ern     •  soluzione:  rappresenta  la  descrizione  degli  elemen@  cos@tu@vi   del  proge>o  con  le  loro  relazioni,  senza  però  scendere  nei   de>agli  implementa@vi.  Quello  che  si  vuole  descrivere  infaD   è  un  problema  astra>o  e  la  rela@va  configurazione  di   elemen@  ada>a  a  risolverlo    
  • 16. Stru>ura  di  un  pa>ern   •  stru5ura  del  pa5ern:  diagramma  di  classi  in  UML  della   stru>ura  generica  del  pa>ern   •  applicazione  del  pa5ern:  offre  un  diagramma  UML  delle  classi   del  problema,  presenta  l’abbinamento  delle  classi  del   problema  con  le  classi  che  descrivono  la  stru>ura  conce>uale   del  pa>ern,  descrive  l’implementazione  del  il  codice  Java,  e   presenta  e  commenta  gli  output  dell’esecuzione   •  osservazioni  sull’implementazione  in  Java:  presenta  gli  aspeD   par@colari  che  riguardano  l’implementazione  del  pa>ern  in   Java  
  • 17. Stru>ura  di  un  pa>ern   •  conseguenze:  i  risulta@  e  i  vincoli  derivan@  dall’applicazione   del  pa>ern.  Essi  sono  fondamentali,  in  quanto  possono   risultare  determinan@  nella  scelta  del  pa>ern  stesso:  le   conseguenze  comprendono  considerazioni  legate  alle  risorse   computazionali  (tempo  e  memoria),  possono  descrivere  le   implicazioni  del  pa>ern  con  alcuni  linguaggi  di   programmazione  e  l’impa>o  di  quest’ul@mo  con  il  resto  del   proge>o    
  • 18. Classificazione  dei  design  pa>ern   •  Ci  sono  diversi  criteri  per  classificare  i  design   pa>erns,  i  più  comuni  dei  quali  sono  quelli  che   evidenziano  il  @po  di  problema  che  si  cerca  di   risolvere     •  Nel  suo  libro,  la  Gang  Of  Four  individuò  23   design  pa>ern  suddivisi  in  tre  categorie.  :   stru>urali,  creazionali  e  comportamentali    
  • 20. Classificazione  dei  design  pa>ern   •  Pa*ern  Creazionali:  rendono  i  componen@  del   sistema  che  usano  determina@  oggeD  indipenden@   da  come  tali  oggeD  sono  sta@  crea@,  compos@  e   rappresenta@.   •  I  pa>ern  creazionali  nascondono  i  costru>ori  delle   classi  e  me>ono  al  loro  posto  dei  metodi  creando   un’interfaccia.   •  In  questo  modo  si  possono  u@lizzare  oggeD  senza   sapere  come  sono  implementa@.  
  • 21. Pa>ern  creazionali   •  L'Abstract  factory  (le>eralmente,  "fabbrica  astra>a")  fornisce   un'interfaccia  per  creare  famiglie  di  oggeD  connessi  o  dipenden@  tra  loro,   in  modo  che  non  ci  sia  necessità  da  parte  degli  u@lizzatori  di  specificare  i   nomi  delle  classi  concrete  all'interno  del  proprio  codice.   •  Il  Builder  ("costru>ore")  separa  la  costruzione  di  un  ogge>o  complesso   dalla  sua  rappresentazione,  in  modo  che  il  processo  di  costruzione  stesso   possa  creare  diverse  rappresentazioni.   •  Il  Factory  method  ("metodo  fabbrica")  fornisce  un'interfaccia  per  creare   un  ogge>o,  ma  lascia  che  le  so>oclassi  decidano  quale  ogge>o  istanziare.  
  • 22. Pa>ern  creazionali   •  La  Lazy  ini?aliza?on  ("inizializzazione  pigra")  è  la  taDca  di  istanziare  un   ogge>o  solo  nel  momento  in  cui  deve  essere  usato  per  la  prima  volta.  È   u@lizzato  spesso  insieme  al  pa>ern  factory  method.   •  Il  Prototype  ("proto@po")  perme>e  di  creare  nuovi  oggeD  clonando  un   ogge>o  iniziale,  o  proto@po.   •  Il  Singleton  ("singole>o")  ha  lo  scopo  di  assicurare  che  di  una  classe  possa   essere  creata  una  sola  istanza.  
  • 24. Classificazione  dei  design  pa>ern   •  Pa*ern  Stru*urali:  perme>ono  di  riu@lizzare   oggeD  esisten@,  u@lizzando  l’ereditarietà  e  il   polimorfismo  per  comporre  interfacce  diverse   o  implementazioni  di  una  stessa  interfaccia.   •  I  pa>ern  stru>urali  riguardano  il  modo  in  cui   più  oggeD  sono  collega@  tra  loro  per  formare   stru>ure  complesse.  
  • 25. Pa>ern  stru>urali   •  L'Adapter  ("ada>atore")  converte  l'interfaccia  di  una  classe  in  una   interfaccia  diversa.   •  Bridge  ("ponte")  perme>e  di  separare  l'astrazione  di  una  classe  dalla  sua   implementazione,  per  perme>ere  loro  di  variare  indipendentemente.   •  Il  Composite  ("composto"),  u@lizzato  per  dare  la  possibilità  all'u@lizzatore   di  manipolare  gli  oggeD  in  modo  uniforme,  organizza  gli  oggeD  in  una   stru>ura  ad  albero.   •  Il  Container  ("contenitore")  offre  una  soluzione  alla  ro>ura   dell'incapsulamento  per  via  dell'uso  dell'ereditarietà.   •  Il  Decorator  ("decoratore")  consente  di  aggiungere  metodi  a  classi   esisten@  durante  il  run-­‐@me  (cioè  durante  lo  svolgimento  del  programma),   perme>endo  una  maggior  flessibilità  nell'aggiungere  delle  funzionalità  agli   oggeD.   •  Extensibility  ("estendibilità")  
  • 26. Pa>ern  stru>urali   •  Il  Façade  ("facciata")  perme>e,  a>raverso  un'interfaccia  più  semplice,   l'accesso  a  so>osistemi  che  espongono  interfacce  complesse  e  diverse  tra   loro.   •  Flyweight  ("peso  piuma"),  che  perme>e  di  separare  la  parte  variabile  di   una  classe  dalla  parte  che  può  essere  riu@lizzata.   •  Proxy  fornisce  una  rappresentazione  di  un  ogge>o  di  accesso  difficile  o   che  richiede  un  tempo  importante  per  l’accesso  o  creazione.  Il  Proxy   consente  di  pos@cipare  l’accesso  o  creazione  al  momento  in  cui  sia   davvero  richiesto.   •  Pipes  and  filters  ("condoD  e  filtri")   •  Private  class  data  ("da@  di  classe  priva@")  
  • 28. Classificazione  dei  design  pa>ern   •  Pa*ern  Comportamentali:  riguardano   l’assegnazione  di  responsabilità  agli  oggeD,   incapsulando  il  comportamento  in  un  ogge>o   e  delegando  ad  esso  determinate  richieste.   •  I  pa>ern  comportamentali  forniscono   soluzione  alle  più  comuni  @pologie  di   interazione  tra  gli  oggeD    
  • 29. Pa>ern  comportamentali   •  Chain  of  Responsibility  ("catena  di  responsabilità")  diminuisce   l'accoppiamento  fra  l'ogge>o  che  effe>ua  una  richiesta  e  quello  che  la   soddisfa,  dando  a  più  oggeD  la  possibilità  di  soddisfarla   •  Il  Command  ("comando")  perme>e  di  isolare  la  porzione  di  codice  che   effe>ua  un'azione  dal  codice  che  ne  richiede  l'esecuzione.   •  Event  Listener  ("ascoltatore  di  even@")   •  Hierarchical  Visitor  ("visitatore  di  gerarchia")   •  Interpreter  ("interprete")  dato  un  linguaggio,  definisce  una   rappresentazione  della  sua  gramma@ca  insieme  ad  un  interprete  che   u@lizza  questa  rappresentazione  per  l'interpretazione  delle  espressioni  in   quel  determinato  linguaggio.   •  L'Iterator  ("iteratore")  risolve  diversi  problemi  connessi  all'accesso  e  alla   navigazione  a>raverso  gli  elemen@  di  una  stru>ura  da@,  senza  esporre  i   de>agli  dell'implementazione  e  della  stru>ura  interna  del  contenitore.  
  • 30. Pa>ern  comportamentali   •  Il  Mediator  ("mediatore")  si  interpone  nelle  comunicazioni  tra  oggeD,  allo   scopo  di  aggiornare  lo  stato  del  sistema  quando  uno  qualunque  di  essi   comunica  un  cambiamento  del  proprio  stato.   •  Il  design  pa>ern  Memento  ("promemoria")  è  l'operazione  di  estrarre  lo   stato  interno  di  un  ogge>o,  senza  violarne  l'incapsulazione,  e   memorizzarlo  per  poterlo  ripris@nare  in  un  momento  successivo.   •  L'Observer  ("osservatore")  definisce  una  dipendenza  uno  a  mol@  fra   oggeD  diversi,  in  maniera  tale  che  se  un  ogge>o  cambia  il  suo  stato,  tuD   gli  oggeD  dipenden@  vengono  no@fica@  del  cambiamento  avvenuto  e   possono  aggiornarsi.   •  Single-­‐serving  Visitor  
  • 31. Pa>ern  comportamentali   •  State  ("stato")  perme>e  ad  un  ogge>o  di  cambiare  il  suo  comportamento   al  cambiare  di  un  suo  stato  interno.   •  Lo  Strategy  ("strategia")  è  u@le  in  quelle  situazioni  dove  è  necessario   modificare  dinamicamente  gli  algoritmi  u@lizza@  da  un'applicazione.   •  Il  Template  method  ("metodo  schema")  perme>e  di  definire  la  stru>ura  di   un  algoritmo  lasciando  alle  so>oclassi  il  compito  di  implementarne  alcuni   passi  come  preferiscono.   •  Il  Visitor  ("visitatore")  perme>e  di  separare  un  algoritmo  dalla  stru>ura  di   oggeD  compos@  a  cui  è  applicato,  in  modo  da  poter  aggiungere  nuovi   comportamen@  senza  dover  modificare  la  stru>ura  stessa.  
  • 32. Design  Pa>erns  :  GoF   •  The  Sacred  Elements  of  the  Faith  
  • 33.
  • 36.
  • 37. Gof  pag.  117   SINGLETON  
  • 38. Singleton   Descrizione   •  Il  Singleton  è  un  design  pa>ern  creazionale  che  ha  lo  scopo  di   garan@re  che  di  una  determinata  classe  venga  creata  una  e   una  sola  istanza,  e  di  fornire  un  punto  di  accesso  globale  a   tale  istanza.  
  • 39. Singleton   Esempio   •  Un  applica@vo  deve  istanziare  un  ogge>o  che  ges@sce  una   stampante.  Questo  ogge>o  deve  essere  unico,  vale  dire,  deve   esserci  soltanto  una  sola  istanza  di  esso,  altrimen@,   potrebbero  risultare  dei  problemi  nella  ges@one  della  risorsa.     •  Il  problema  è  la  definizione  di  una  classe  che  garan@sca  la   creazione  di  un'unica  istanza  all’interno  del  programma.    
  • 40. Singleton   Problema   •  Bisogna  garan@re  che  la  classe  abbia  un’unica  istanza,   accessibile  a>raverso  un  unico  punto  di  ingresso  alla  classe   stessa.   •  Tipicamente  questo  si  verifica  quando  la  classe  man@ene   informazioni  che  devono  essere  condivise  da  più  par@   dell’applicazione  e  non  è  corre>o  oppure  non  è  efficiente  che   queste  informazioni  siano  duplicate    
  • 41. Singleton   Soluzione   •  Il  “Singleton”  pa>ern  definisce  una  classe  della  quale  è   possibile  la  istanziazione  di  un  unico  ogge>o,  tramite   l’invocazione  a  un  metodo  della  classe,  incaricato  della   produzione  degli  oggeD.   •  Le  diverse  richieste  di  istanziazione,  comportano  la   res@tuzione  di  un  riferimento  allo  stesso  ogge>o.    
  • 42. Singleton   Soluzione   •  Si  rende  il  costru>ore  della  classe  privato,  in  modo  che  non   sia  possibile  creare  dire>amente  istanze  di  tale  classe.   •  La  classe  viene  dotata  di  un  metodo  sta?c  per  o>enere   un’unica  istanza,  che  viene  memorizzata  in  un  campo  sta?c   privato  della  classe  stessa.  Tu>avia  possono  esserci  alcune   variazioni  a  tale  soluzione:     –  l’istanza  può  essere  creata  all’inizializzazione  del  programma,   oppure  la  prima  volta  che  viene  richiesta     –  l’istanza  può  appartenere  a  una  so>o  classe  della  classe   singleton  (come  accade  nel  Factory  Method)  
  • 44. Singleton   Schema  del  modello   •  Si  presenta  di  seguito  una  delle  implementazioni  più  semplici   del  Singleton:        
  • 45. Singleton   PartecipanJ   •  Singleton:  classe  PrinterSpooler.     –  Definisce  un  metodo  getInstance  che  res@tuisce  un   riferimento  alla  unica  istanza  di  se  stessa.     –  E’  responsabile  della  creazione  della  propria  unica  istanza.      
  • 46. Singleton   Implementazione   •  L'implementazione  più  semplice  di  questo  pa>ern  prevede   che  la  classe  singleton  abbia  un  unico  costru>ore  privato,  in   modo  da  impedire  l'istanziazione  dire>a  della  classe.    
  • 48. Singleton   Implementazione  mulJ-­‐thread   •  In  applicazioni  mul@-­‐thread  l'u@lizzo  di  questo  pa>ern  con  la   lazy  ini?aliza?on  richiede  un'a>enzione  par@colare:  se  due   thread  tentano  di  eseguire  contemporaneamente  il   costru>ore  quando  la  classe  non  è  stata  ancora  istanziata,   devono  entrambi  controllare  se  l'istanza  esiste  e  soltanto  uno   deve  creare  la  nuova  istanza.    
  • 49. Singleton   Sincronizzazione  esplicita   •  Il  modo  più  semplice  per  implementare  una  versione  thread-­‐ safe  è  quello  di  usare  un  meccanismo  di  sincronizzazione   come  quello  fornito  dalla  parola  chiave  synchronized  di  Java.   •  Tu>avia  questo  approccio  è  inefficiente:  infaD  la   sincronizzazione  è  u@le  solo  per  la  prima  inizializzazione,  e   cos@tuisce  un  inu@le  overhead  nelle  successive  chiamate  al   metodo  getter.      
  • 51. Singleton   Sincronizzazione  implicita   •  In  alcuni  linguaggi  è  possibile  evitare  l'overhead  di   sincronizzazione  sfru>ando  quelle  peculiarità  della  lazy   ini?aliza?on  che  consentono  di  assicurarsi  la  presenza  del   singleton  in  memoria  all'a>o  del  suo  u@lizzo.   •  Le  modalità  specifiche  possono  variare  da  linguaggio  a   linguaggio;  ad  esempio,  in  Java  è  possibile  sfru>are  il  fa>o   che  l'inizializzazione  di  una  classe  ed  il  suo  caricamento  in   memoria,  quando  avvengono,  sono  operazioni  thread-­‐safe   che  comprendono  l'inizializzazione  di  tu>e  le  variabili  sta@che   (a>ribu@)  della  classe  stessa.    
  • 53. Singleton   Conseguenze   •  Con  il  singleton  si  ha  che:     –  l’accesso  alla  classe  è  controllato  e  avviene  a>raverso  l’unica   istanza  che  può  essere  creata     –  non  occorre  introdurre  variabili  globali  per  accedere  all’unica   istanza     –  è  semplice  estendere  la  classe  singleton  senza  modificare  il   codice  che  usa     –  è  semplice  passare  da  una  singola  istanza  a  più  istanze      
  • 54. Singleton   CriJche   •  Alcuni  autori  hanno  cri@cato  il  pa>ern  Singleton,  osservando   che,  con  opportune  modifiche  stru>urali,  una  istanza  singola   può  entrare  più  efficacemente  a  far  parte  dell'Ambiente   globale  dell'applicazione  
  • 56. Enterprise  Pa>erns   •  Pa>erns  of  Enterprise  Applica@on  Architecture   •  Core  J2EE  Pa>erns   •  Integra@on  Pa>erns  
  • 58.
  • 59. Core  J2EE  Pa>erns   •  Presenta@on  Tier   •  Business  Tier   •  Integra@on  Tier  
  • 60. Core  J2EE  Pa>erns   •  Presenta@on  Tier   –  –  –  –  –  –  –  –  Applica@on  Controller   Composite  View   Context  Object   Dispatcher  View   Front  Controller   Intercep@ng  Filter   Service  To  Worker   View  Helper  
  • 61. Core  J2EE  Pa>erns   •  Business  Tier   –  –  –  –  –  –  –  –  –  Applica@on  Service   Business  Delegate   Business  Object   Composite  En@ty   Service  Locator   Session  Façade   Transfer  Object  (DTO)   Transfer  Object  Assembler   Value  List  Handler  
  • 62. Core  J2EE  Pa>erns   •  Integra@on  Tier   –  –  –  –  Data  Access  Object  (DAO)   Domain  Store   Service  Ac@vator   Web  Service  Broker  
  • 63. Presenta@on  Tier  Pa>ern   –  Applica@on  Controller   –  Composite  View   –  Context  Object   –  Dispatcher  View   –  Front  Controller   –  Intercep@ng  Filter   –  Service  To  Worker   –  View  Helper  
  • 64. PoEAA  -­‐  pag.  117   FRONT  CONTROLLER  
  • 67. Front  Controller   Descrizione   •  Consente  di  ges@re  il  mapping  logico  delle  risorse    
  • 68. Front  Controller   Problema   •  Si  vuole  fornire  un  punto  di  accesso  centralizzato  per  la   ges@one  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ù  richieste.    
  • 69. Front  Controller   Soluzione   •  Si  u@lizza  un  Front  Controller  come  punto  di  accesso  iniziale   per  ges@re  tu>e  le  richieste  connesse  tra  loro.   •  Il  Front  Controller  centralizza  la  logica  di  controllo  che   dovrebbe  altrimen@  essere  replicata  per  ogni  richiesta.    
  • 70. Front  Controller   Use to Implement: •  Logical Resource Mapping •  Session Management •  Audit Logging Avoid: •  Physical Resource Mapping •  Unhandled Mapping in Multyplexed Resource Mapping strategy •  Logging of Arbitrary HTTTP Parameters •  Duplicating Common Logic Across Multiple Front Controllers Avoid: •  Invoking Commands Without Sufficient Authorization
  • 74. Front  Controller   Conseguenze   •  Le  conseguenze  che  derivano  dall’u@lizzo  di  tale  pa>ern  sono:   –  –  –  –  centralizzazione  del  controllo   miglioramento  della  riusabilità   miglioramento  della  manutenibilità   separazione  dei  ruoli  all’interno  dell’applicazione