SlideShare una empresa de Scribd logo
1 de 26
Lezione 21: Design
    Pattern Creazionali
       Corso di Ingegneria del Software
     Laurea Magistrale in Ing. Informatica
       Università degli Studi di Salerno



1
Outline

    ✦ Introduzione ai Design Patterns

    ✦ I Design Patterns di creazione

     •   Factory Method

     •   Abstract Factory

     •   Singleton




2
Il termine “pattern”

    pattern
    noun
    1 a repeated decorative design : a neat blue herringbone pattern.
      • an arrangement or sequence regularly found in comparable objects or events : the
      house had been built on the usual pattern.
      • a regular and intelligible form or sequence discernible in certain actions or
      situations : a complicating factor is the change in working patterns.

    2 a model or design used as a guide in needlework and other crafts. See note at
    model .
     • a set of instructions to be followed in making a sewn or knitted item.
     • a wooden or metal model from which a mold is made for a casting.
     • an example for others to follow : he set the pattern for subsequent study.
     • a sample of cloth or wallpaper.




3
Design Patterns: storia
    ✦ Il concetto è stato introdotto
      dall’architetto C. Alexander nel contesto
      della progettazione urbanistica e
      architettonica (1975)
    ✦ A partire dal 1987 K. Beck e W.
      Cunningham hanno applicato questa idea
      alla progettazione del software
    ✦ La popolarità è arrivata grazie al libro
      “Design Patterns” di Gamma, Helm,
      Johnson, Vlissides (1994)

4
Design Patterns: definizione

    ✦ Design Pattern: soluzione progettuale per
      un problema ricorrente in un determinato
      contesto
     •   riuso dell’esperienza di progettazione (propria o
         altrui)
     •   linguaggio comune per comunicare scelte
         progettuali (se i patterns sono opportunamente
         codificati e identificati)




5
Elementi essenziali
    ✦ Nome
     •   un Design Pattern deve essere identificato in
         modo univoco per favorire la comunicazione
    ✦ Problema affrontato
     •   descrizione del contesto in cui è possibile
         applicare il Pattern
    ✦ Soluzione
     •   per la progettazione OO è espressa in termini di
         classi, responsabilità e collaborazioni
    ✦ Conseguenze
     •   risultati dell’applicazione del pattern (pro e
         contro), da valutare nella scelta tra più alternative
6
Classificazione

    ✦ Gamma et al. descrivono i Design Pattern
      classificandoli in base a due
      caratteristiche:
     •   purpose: campo di applicazione del pattern
         (Pattern di Creazione, Strutturali e
         Comportamentali)
     •   scope: indica se il pattern specifica relazioni tra
         classi oppure tra oggetti




7
Classificazione




8
Pattern di creazione
    ✦ Un creational pattern rende i componenti
      del sistema che usano determinati oggetti
      indipendenti da come tali oggetti siano
      creati, composti e rappresentati
     •   nasconde (nel senso di information hiding) la
         conoscenza di quali sono le classi concrete
         effettivamente instanziate
     •   nasconde dettagli sulla creazione e sulla
         composizione degli oggetti (es. parametri usati al
         momento della creazione)
     •   riduce l’accoppiamento e aumenta la flessibilità

9
Factory Method

     ✦ Il problema
      •   una classe ha bisogno di creare un oggetto
          (“prodotto”) che implementa un’interfaccia, ma si
          vuole evitare che dipenda da una specifica
          implementazione concreta tra quelle disponibili
      •   oppure, una classe vuole delegare alle sottoclassi
          la creazione di determinati oggetti




10
Factory Method
     ✦ Soluzione
      •   si incapsula la creazione degli oggetti in un
          metodo
      •   varianti
          ‣   il metodo può essere nella stessa classe che deve usare gli
              oggetti oppure essere un metodo “static” di una classe
              diversa
          ‣   il metodo può essere “abstract”, e quindi richiedere che
              una sottoclasse ne definisca l’implementazione, oppure
              essere concreto, e fornire un’implementazione di default
              (ad esempio basata su configurazione esterna)



11
Factory Method
     ✦ Esempio di struttura




12
Factory Method


     ✦ Conseguenze
      •   le sottoclassi hanno “agganci” (hooks) per
          estendere il comportamento della classe base
          cambiando il tipo di prodotto che viene creato
      •   è possibile stabilire legami tra gerarchie di classi
          parallele




13
Factory Method
     ✦ Esempio
      •   creazione di una connessione a un database con
          JDBC:
          ‣   Connection conn=DriverManager.getConnection(...);
          ‣   in questo modo la creazione è indipendente dalla effettiva
              classe che realizza l’interfaccia Connection (che dipende
              dal driver usato)

     ✦ Esempio
      •   creazione di un iteratore per una collezione
          ‣   Iterator iter=myCollection.iterator();
          ‣   collega la gerarchia delle collezioni alla gerarchia degli
              iteratori, selezionando l’iteratore appropriato per ogni
              collezione concreta
14
Abstract Factory
     ✦ Il problema
      •   una classe ha bisogno di creare una serie di
          oggetti (“prodotti”) che implementano delle
          interfacce correlate, ma si vuole evitare che
          dipenda da una specifica implementazione
          concreta tra quelle disponibili
      •   il sistema deve essere configurato con famiglie
          multiple di prodotti, dove una famiglia è
          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
15
Abstract Factory
     ✦ Soluzione
      •   Si definisce un’interfaccia AbstractFactory con
          metodi per creare i diversi prodotti, e una o più
          classi concrete che implementano questa
          interfaccia in riferimento a una singola famiglia di
          prodotti
      •   a run-time si costruisce un’istanza di una
          “concrete factory” che viene usata per creare i
          prodotti
          ‣   NOTA: la creazione di questa istanza può essere a sua
              volta realizzata con un Factory Method



16
Abstract Factory
     ✦ Esempio di struttura




17
Abstract Factory
     ✦ Conseguenze
      •   nasconde le classi concrete; solo la factory sa
          quale classe concreta viene istanziata
      •   consente di sostituire facilmente una famiglia di
          prodotti con un’altra
      •   garantisce che i prodotti usati insieme siano della
          stessa famiglia
      •   PROBLEMA: rende onerosa l’aggiunta di nuovi
          prodotti a una famiglia, in quanto bisogna
          modificare simultaneamente tutte le famiglie e
          tutte le “concrete factories”


18
Abstract Factory
     ✦ Esempio
      •   la libreria AWT ha bisogno di creare, per ogni
          componente (es. finestra, menù, bottone etc.), un
          oggetto (“peer”) dipendente dalla specifica
          piattaforma che colleghi il componente astratto al
          suo equivalente nel sistema operativo
      •   per ogni sistema operativo c’è una famiglia di
          peer, che deve essere usata nel suo insieme;
          l’effettiva famiglia usata deve essere però
          nascosta al codice che usa AWT



19
Abstract Factory
     ✦ Esempio (continua)
      •   soluzione: la classe astratta java.awt.Toolkit
          realizza una Abstract Factory:
          ‣   metodi createWindow, createMenu, createScrollbar,
              createImage etc. per creare ciascun tipo di peer

      •   un’istanza di una sottoclasse concreta di Toolkit
          viene creata con un Factory Method:
          ‣   Toolkit tk = Toolkit.getDefaultToolkit();

      •   la scelta della concrete factory viene fatta in base
          alla configurazione della Java Virtual Machine


20
Singleton
     ✦ Il problema
      •   in alcuni casi è necessario garantire che una
          classe abbia un’unica istanza, accessibile
          attraverso un unico punto di accesso
          ‣   NOTA: tipicamente questo si verifica quando la classe
              mantiene informazioni di stato che devono essere
              condivise da più parti del programma, e non è corretto
              oppure non è efficiente (ad es. nel caso di una cache) che
              queste informazioni siano duplicate
          ‣   NOTA: spesso questa proprietà è desiderabile per le
              Abstract Factories




21
Singleton
     ✦ Soluzione
      •   si rende il costruttore della classe privato, in
          modo che non sia possibile creare direttamente
          istanze (al di fuori del codice della classe)
      •   si fornisce un metodo “static” per ottenere l’unica
          istanza, che viene conservata in un campo static
          privato della classe
      •   variazioni
          ‣   l’istanza può essere creata all’inizializzazione del
              programma, oppure la prima volta che viene richiesta
          ‣   l’istanza, se necessario, può appartenere a una sottoclasse
              della classe singleton (vedi Factory Method)


22
Singleton
     ✦ Esempio di struttura




23
Singleton

     ✦ Conseguenze
      •   accesso controllato all’unica istanza
      •   non occorre introdurre variabili globali per
          accedere all’unica istanza
      •   è semplice estendere (attraverso subclassing) la
          classe singleton senza modificare il codice che la
          usa
      •   se necessario, è semplice passare da una singola
          istanza a un numero diverso di istanze



24
Singleton
     ✦ Esempio di implementazione
            import java.util.*;
            public class Cache {
            	 static private Cache instance=null;
            	 public static Cache getCache() {
            	 	 if (instance==null)
            	 	 	 instance=new Cache();
            	 	 return instance;
            	 }
            	
            	 private Map<String, String> map;
            	
            	 private Cache() {
            	 	 map=new HashMap<String, String>();
            	 }
            	
            	 public String get(String key) {
            	 	 return map.get(key);
            	 }
            	
            	 public void put(String key, String value) {
            	 	 map.put(key, value);
            	 }
            }
25
Singleton
     ✦ Esempio
      •   Nella libreria AWT vers. 1.6 c’è una classe
          SystemTray che rappresenta quella parte del
          desktop nota come “system tray”, “taskbar status
          area” ecc. Poiché sul desktop ci può essere un
          solo system tray, la classe è gestita come
          Singleton
          ‣   ...
              SystemTray tray = SystemTray.getSystemTray();
              tray.add(statusIcon);
              ...



26

Más contenido relacionado

Similar a Lezione 5: Design Pattern Creazionali

Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
Nelson Firmani
 
Lezione 09 - Abstract Factory
Lezione 09 - Abstract FactoryLezione 09 - Abstract Factory
Lezione 09 - Abstract Factory
Marco Bianchi
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
lukebonham
 
Lezione 04 - Factory method
Lezione 04 - Factory methodLezione 04 - Factory method
Lezione 04 - Factory method
Marco Bianchi
 
Mob03 what's new in windows phone
Mob03   what's new in windows phoneMob03   what's new in windows phone
Mob03 what's new in windows phone
DotNetCampus
 

Similar a Lezione 5: Design Pattern Creazionali (20)

Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
iOS_Course_8
iOS_Course_8iOS_Course_8
iOS_Course_8
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
pattern
patternpattern
pattern
 
Lezione 09 - Abstract Factory
Lezione 09 - Abstract FactoryLezione 09 - Abstract Factory
Lezione 09 - Abstract Factory
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
 
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
 
Lezione 04 - Factory method
Lezione 04 - Factory methodLezione 04 - Factory method
Lezione 04 - Factory method
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and Design
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
 
Mob03 what's new in windows phone
Mob03   what's new in windows phoneMob03   what's new in windows phone
Mob03 what's new in windows phone
 

Más de Andrea Della Corte

Más de Andrea Della Corte (18)

Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Último

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 

Último (20)

Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 

Lezione 5: Design Pattern Creazionali

  • 1. Lezione 21: Design Pattern Creazionali Corso di Ingegneria del Software Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Introduzione ai Design Patterns ✦ I Design Patterns di creazione • Factory Method • Abstract Factory • Singleton 2
  • 3. Il termine “pattern” pattern noun 1 a repeated decorative design : a neat blue herringbone pattern. • an arrangement or sequence regularly found in comparable objects or events : the house had been built on the usual pattern. • a regular and intelligible form or sequence discernible in certain actions or situations : a complicating factor is the change in working patterns. 2 a model or design used as a guide in needlework and other crafts. See note at model . • a set of instructions to be followed in making a sewn or knitted item. • a wooden or metal model from which a mold is made for a casting. • an example for others to follow : he set the pattern for subsequent study. • a sample of cloth or wallpaper. 3
  • 4. Design Patterns: storia ✦ Il concetto è stato introdotto dall’architetto C. Alexander nel contesto della progettazione urbanistica e architettonica (1975) ✦ A partire dal 1987 K. Beck e W. Cunningham hanno applicato questa idea alla progettazione del software ✦ La popolarità è arrivata grazie al libro “Design Patterns” di Gamma, Helm, Johnson, Vlissides (1994) 4
  • 5. Design Patterns: definizione ✦ Design Pattern: soluzione progettuale per un problema ricorrente in un determinato contesto • riuso dell’esperienza di progettazione (propria o altrui) • linguaggio comune per comunicare scelte progettuali (se i patterns sono opportunamente codificati e identificati) 5
  • 6. Elementi essenziali ✦ Nome • un Design Pattern deve essere identificato in modo univoco per favorire la comunicazione ✦ Problema affrontato • descrizione del contesto in cui è possibile applicare il Pattern ✦ Soluzione • per la progettazione OO è espressa in termini di classi, responsabilità e collaborazioni ✦ Conseguenze • risultati dell’applicazione del pattern (pro e contro), da valutare nella scelta tra più alternative 6
  • 7. Classificazione ✦ Gamma et al. descrivono i Design Pattern classificandoli in base a due caratteristiche: • purpose: campo di applicazione del pattern (Pattern di Creazione, Strutturali e Comportamentali) • scope: indica se il pattern specifica relazioni tra classi oppure tra oggetti 7
  • 9. Pattern di creazione ✦ Un creational pattern rende i componenti del sistema che usano determinati oggetti indipendenti da come tali oggetti siano creati, composti e rappresentati • nasconde (nel senso di information hiding) la conoscenza di quali sono le classi concrete effettivamente instanziate • nasconde dettagli sulla creazione e sulla composizione degli oggetti (es. parametri usati al momento della creazione) • riduce l’accoppiamento e aumenta la flessibilità 9
  • 10. Factory Method ✦ Il problema • una classe ha bisogno di creare un oggetto (“prodotto”) che implementa un’interfaccia, ma si vuole evitare che dipenda da una specifica implementazione concreta tra quelle disponibili • oppure, una classe vuole delegare alle sottoclassi la creazione di determinati oggetti 10
  • 11. Factory Method ✦ Soluzione • si incapsula la creazione degli oggetti in un metodo • varianti ‣ il metodo può essere nella stessa classe che deve usare gli oggetti oppure essere un metodo “static” di una classe diversa ‣ il metodo può essere “abstract”, e quindi richiedere che una sottoclasse ne definisca l’implementazione, oppure essere concreto, e fornire un’implementazione di default (ad esempio basata su configurazione esterna) 11
  • 12. Factory Method ✦ Esempio di struttura 12
  • 13. Factory Method ✦ Conseguenze • le sottoclassi hanno “agganci” (hooks) per estendere il comportamento della classe base cambiando il tipo di prodotto che viene creato • è possibile stabilire legami tra gerarchie di classi parallele 13
  • 14. Factory Method ✦ Esempio • creazione di una connessione a un database con JDBC: ‣ Connection conn=DriverManager.getConnection(...); ‣ in questo modo la creazione è indipendente dalla effettiva classe che realizza l’interfaccia Connection (che dipende dal driver usato) ✦ Esempio • creazione di un iteratore per una collezione ‣ Iterator iter=myCollection.iterator(); ‣ collega la gerarchia delle collezioni alla gerarchia degli iteratori, selezionando l’iteratore appropriato per ogni collezione concreta 14
  • 15. Abstract Factory ✦ Il problema • una classe ha bisogno di creare una serie di oggetti (“prodotti”) che implementano delle interfacce correlate, ma si vuole evitare che dipenda da una specifica implementazione concreta tra quelle disponibili • il sistema deve essere configurato con famiglie multiple di prodotti, dove una famiglia è 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 15
  • 16. Abstract Factory ✦ Soluzione • Si definisce un’interfaccia AbstractFactory con metodi per creare i diversi prodotti, e una o più classi concrete che implementano questa interfaccia in riferimento a una singola famiglia di prodotti • a run-time si costruisce un’istanza di una “concrete factory” che viene usata per creare i prodotti ‣ NOTA: la creazione di questa istanza può essere a sua volta realizzata con un Factory Method 16
  • 17. Abstract Factory ✦ Esempio di struttura 17
  • 18. Abstract Factory ✦ Conseguenze • nasconde le classi concrete; solo la factory sa quale classe concreta viene istanziata • consente di sostituire facilmente una famiglia di prodotti con un’altra • garantisce che i prodotti usati insieme siano della stessa famiglia • PROBLEMA: rende onerosa l’aggiunta di nuovi prodotti a una famiglia, in quanto bisogna modificare simultaneamente tutte le famiglie e tutte le “concrete factories” 18
  • 19. Abstract Factory ✦ Esempio • la libreria AWT ha bisogno di creare, per ogni componente (es. finestra, menù, bottone etc.), un oggetto (“peer”) dipendente dalla specifica piattaforma che colleghi il componente astratto al suo equivalente nel sistema operativo • per ogni sistema operativo c’è una famiglia di peer, che deve essere usata nel suo insieme; l’effettiva famiglia usata deve essere però nascosta al codice che usa AWT 19
  • 20. Abstract Factory ✦ Esempio (continua) • soluzione: la classe astratta java.awt.Toolkit realizza una Abstract Factory: ‣ metodi createWindow, createMenu, createScrollbar, createImage etc. per creare ciascun tipo di peer • un’istanza di una sottoclasse concreta di Toolkit viene creata con un Factory Method: ‣ Toolkit tk = Toolkit.getDefaultToolkit(); • la scelta della concrete factory viene fatta in base alla configurazione della Java Virtual Machine 20
  • 21. Singleton ✦ Il problema • in alcuni casi è necessario garantire che una classe abbia un’unica istanza, accessibile attraverso un unico punto di accesso ‣ NOTA: tipicamente questo si verifica quando la classe mantiene informazioni di stato che devono essere condivise da più parti del programma, e non è corretto oppure non è efficiente (ad es. nel caso di una cache) che queste informazioni siano duplicate ‣ NOTA: spesso questa proprietà è desiderabile per le Abstract Factories 21
  • 22. Singleton ✦ Soluzione • si rende il costruttore della classe privato, in modo che non sia possibile creare direttamente istanze (al di fuori del codice della classe) • si fornisce un metodo “static” per ottenere l’unica istanza, che viene conservata in un campo static privato della classe • variazioni ‣ l’istanza può essere creata all’inizializzazione del programma, oppure la prima volta che viene richiesta ‣ l’istanza, se necessario, può appartenere a una sottoclasse della classe singleton (vedi Factory Method) 22
  • 23. Singleton ✦ Esempio di struttura 23
  • 24. Singleton ✦ Conseguenze • accesso controllato all’unica istanza • non occorre introdurre variabili globali per accedere all’unica istanza • è semplice estendere (attraverso subclassing) la classe singleton senza modificare il codice che la usa • se necessario, è semplice passare da una singola istanza a un numero diverso di istanze 24
  • 25. Singleton ✦ Esempio di implementazione import java.util.*; public class Cache { static private Cache instance=null; public static Cache getCache() { if (instance==null) instance=new Cache(); return instance; } private Map<String, String> map; private Cache() { map=new HashMap<String, String>(); } public String get(String key) { return map.get(key); } public void put(String key, String value) { map.put(key, value); } } 25
  • 26. Singleton ✦ Esempio • Nella libreria AWT vers. 1.6 c’è una classe SystemTray che rappresenta quella parte del desktop nota come “system tray”, “taskbar status area” ecc. Poiché sul desktop ci può essere un solo system tray, la classe è gestita come Singleton ‣ ... SystemTray tray = SystemTray.getSystemTray(); tray.add(statusIcon); ... 26