SlideShare a Scribd company logo
1 of 34
Download to read offline
Marco Faella



  Alcuni Design Pattern in Java

basato su “Progettazione del Software e Design Pattern in Java”,
                       di Cay Horstmann
Pattern ITERATOR
●   Contesto:
    1) Un oggetto (aggregato) contiene altri oggetti (elementi)
    2) I clienti devono accedere a tutti gli elementi
    3) L'aggregato non deve esporre la sua struttura interna
    4) Più clienti devono poter accedere contemporaneamente
●   Soluzione:
    1) Definire una classe iteratore che recupera un elemento per volta
    2) L'aggregato ha un metodo che restituisce un iteratore
Diagramma del pattern ITERATOR
Iteratori in Java
Paradigma Model­View­Controller (MVC)


●   Dividere le responsabilità tra:
    –   i dati di interesse (model)
    –   la loro presentazione (view)
    –   l'interazione con l'utente (controller)




                                                  5
Esempio: editor di pagine HTML

–   Model: i caratteri che compongono la pagina
     ●   classe HtmlPage
–   View: una vista carattere per carattere, o una vista 
    WYSIWYG (what you see is what you get)
     ●   classi HtmlRawView, HtmlRenderedView
–   Controller: l'observer che riceve gli eventi dall'utente e 
    produce modifiche sul modello 
     ●   classe InsertListener


                                                              6
Esempio: pagine HTML




                       7
Pattern OBSERVER
●   Contesto:
    –   Un oggetto (soggetto) genera eventi
    –   Uno o più oggetti (osservatori) vogliono essere informati del verificarsi di 
        tali eventi
●   Soluzione:
    –   Definire un'interfaccia con un metodo notify, che sarà implementata dagli 
        osservatori
    –   Il soggetto ha un metodo (attach) per registrare un osservatore
    –   Il soggetto gestisce l'elenco dei suoi osservatori registrati
    –   Quando si verifica un evento, il soggetto informa tutti gli osservatori 
        registrati, chiamando il loro metodo notify

                                                                                    8
Diagramma del pattern OBSERVER




                                 9
Applicazione del pattern OBSERVER




                                    10
Esempio: funzioni matematiche
●   Studio di funzioni parametriche di una variabile reale
●   Ad esempio, parabole
    –     a x2 + b x + c; variabile: x; parametri: a, b, c


●   Model: la funzione
●   View: il suo grafico, o una tabella di valori
●   Controller: le classi che rispondono allo spostamento 
    degli slider e modificano i parametri della funzione

                                                             11
Esempio: funzioni matematiche




                                12
Pattern STRATEGY
●   Contesto:
    1) Una classe (Context) può sfruttare diverse varianti di un algoritmo
    2) I clienti della classe vogliono fornire versioni particolari dell'algoritmo
●   Soluzione:
    1) Definire un'interfaccia (Strategy) che rappresenti un'astrazione 
       dell'algoritmo
    2) Per fornire una variante dell'algoritmo, un cliente costruisce un oggetto di 
       una classe (ConcreteStrategy) che implementa l'interfaccia Strategy e lo 
       passa alla classe Context
    3) Ogni volta che deve eseguire l'algoritmo, la classe Context invoca il 
       corrispondente metodo dell'oggetto che concretizza la strategia



                                                                                     13
Diagramma del pattern STRATEGY




                                 14
Applicazione del pattern STRATEGY (1)




                                    15
Applicazione del pattern STRATEGY (2)




                                    16
Contenitori e componenti
                                         output:
// un contenitore
Container x = new Container();
x.setLayout(new FlowLayout());
// aggiungo un componente al contenitore
x.add(new Jbutton(“qui”));
// aggiungo un altro componente al contenitore
x.add(new Jbutton(“qua”));

// la finestra
JFrame f = new JFrame();       
Container c = f.getContentPane();
c.setLayout(new FlowLayout());
c.add(x); // x si comporta come un componente!
c.add(new JButton(“quo”));
...                                                17
Pattern COMPOSITE
●   Contesto:
    1) Oggetti primitivi possono essere combinati in un oggetto composito
    2) I clienti possono trattare un oggetto composito come primitivo
●   Soluzione:
    1) Definire un'interfaccia (Primitive) che rappresenti un'astrazione 
       dell'oggetto primitivo
    2) Un oggetto composito contiene una collezione di oggetti primitivi 
    3) Sia gli oggetti primitivi che quelli compositi implementano 
       l'interfaccia Primitive
    4) Nel realizzare un metodo dell'interfaccia Primitive, un oggetto 
       composito applica il metodo corrispondente a tutti i propri oggetti 
       primitivi, e poi combina i risultati ottenuti
                                                                              18
Diagramma del pattern COMPOSITE




                                  19
Applicazione del pattern COMPOSITE




                                     20
Barre di scorrimento
/* un'area di testo con 10 righe e 25 colonne */
Component area = new JTextArea(10, 25);


/* aggiungiamo le barre di scorrimento */
Component scrollArea = new JScrollPane(area);




                                                   21
Pattern DECORATOR
●   Contesto:
    1) Si vuole decorare (ovvero migliorare, ovvero aggiungere 
       funzionalità a) una classe componente
    2) Un componente decorato può essere utilizzato nello stesso modo di 
       uno normale
    3) La classe componente non vuole assumersi la responsabilità della 
       decorazione
    4) L'insieme delle decorazioni possibili non è limitato




                                                                       22
Pattern DECORATOR
●   Soluzione:
    1) Definire un'interfaccia (Component) che rappresenti un'astrazione 
       di un componente
    2) Le classi concrete che definiscono componenti implementano 
       l'interfaccia Component
    3) Definire una classe (Decorator) che rappresenta la decorazione
    4) Un oggetto decoratore contiene e gestisce l'oggetto che decora
    5) Un oggetto decoratore implementa l'interfaccia Component 
    6) Nel realizzare un metodo di Component, un oggetto decoratore 
       applica il metodo corrispondente all'oggetto decorato e ne combina 
       il risultato con l'effetto della decorazione
                                                                            23
Diagramma del pattern DECORATOR




                                  24
Applicazione del pattern DECORATOR




                                 25
COMPOSITE vs DECORATOR




                         26
Pattern TEMPLATE METHOD
●   Contesto:
    1) Un algoritmo è applicabile a più tipi di dati
    2) L'algoritmo può essere scomposto in operazioni 
      primitive. Le operazioni primitive possono essere 
      diverse per ciascun tipo di dato
    3) L'ordine di applicazione delle operazioni primitive non 
      dipende dal tipo di dato




                                                                  27
Pattern TEMPLATE METHOD
●   Soluzione:
    1) Definire una superclasse che abbia un metodo che realizza 
      l'algoritmo e un metodo per ogni operazione primitiva
    2) Le operazioni primitive non sono implementate nella 
      superclasse (metodi astratti), oppure sono implementate in 
      modo generico
    3) Ridefinire in ogni sottoclasse i metodi che rappresentano 
      operazioni primitive, ma non il metodo che rappresenta 
      l'algoritmo



                                                                    28
Diagramma del pattern
TEMPLATE METHOD




                        29
Applicazione del pattern
 TEMPLATE METHOD




                           30
Pattern FACTORY METHOD
●   Contesto:
    1)Un tipo (creatore) crea oggetti di altro tipo (prodotto)
    2)Le sottoclassi del tipo creatore devono creare prodotti di tipi 
      diversi
    3)I clienti non hanno bisogno di sapere il tipo esatto dei 
      prodotti




                                                                     31
Pattern FACTORY METHOD
●   Soluzione:
    1)Definire un tipo per un creatore generico
    2)Definire un tipo per un prodotto generico
    3)Nel tipo creatore generico, definire un metodo (detto metodo 
      fabbrica) che restituisce un prodotto generico
    4)Ogni sottoclasse concreta del tipo creatore generico realizza 
      il metodo fabbrica in modo che restituisca un prodotto 
      concreto




                                                                  32
Diagramma del pattern
 FACTORY METHOD




                        33
Applicazione del pattern
 FACTORY METHOD




                           34

More Related Content

Similar to pattern

Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignK-Tech Formazione
 
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...Pieredoardo Gabutti
 
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerQt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerPaolo Sereno
 
Templating (3/3) | Train to Symfony
Templating (3/3) | Train to SymfonyTemplating (3/3) | Train to Symfony
Templating (3/3) | Train to Symfonyinmarelibero
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)brossi676
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object OrientedStefano Fago
 
Qt Lezione4 Parte1: creare un custom widget plugin
Qt Lezione4 Parte1: creare un custom widget pluginQt Lezione4 Parte1: creare un custom widget plugin
Qt Lezione4 Parte1: creare un custom widget pluginPaolo Sereno
 
Panoramica su Dagger2 per Android
Panoramica su Dagger2 per AndroidPanoramica su Dagger2 per Android
Panoramica su Dagger2 per AndroidBoris D'Amato
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...Lorenzo Gasparini
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Linguaggio V.B.A.
Linguaggio V.B.A.Linguaggio V.B.A.
Linguaggio V.B.A.Agabiti25
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingVittoriano Muttillo
 
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
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 

Similar to pattern (20)

Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and Design
 
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
Progetto e realizzazione di un'interfaccia web interattiva per un sistema di ...
 
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerQt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
 
Templating (3/3) | Train to Symfony
Templating (3/3) | Train to SymfonyTemplating (3/3) | Train to Symfony
Templating (3/3) | Train to Symfony
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)
 
Riuso Object Oriented
Riuso Object OrientedRiuso Object Oriented
Riuso Object Oriented
 
Qt Lezione4 Parte1: creare un custom widget plugin
Qt Lezione4 Parte1: creare un custom widget pluginQt Lezione4 Parte1: creare un custom widget plugin
Qt Lezione4 Parte1: creare un custom widget plugin
 
Panoramica su Dagger2 per Android
Panoramica su Dagger2 per AndroidPanoramica su Dagger2 per Android
Panoramica su Dagger2 per Android
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
Realizzazione di un Add-on per Google Docs per estrazione interattiva di patt...
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Terza lezioneandroid
Terza lezioneandroidTerza lezioneandroid
Terza lezioneandroid
 
Linguaggio V.B.A.
Linguaggio V.B.A.Linguaggio V.B.A.
Linguaggio V.B.A.
 
Progettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time loggingProgettazione e realizzazione di un sistema software per il time logging
Progettazione e realizzazione di un sistema software per il time logging
 
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
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 

Recently uploaded

Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.giuliofiorerm
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
San Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxSan Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxMartin M Flynn
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 

Recently uploaded (8)

Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
RICERCA_SUGLI ANFIBI PER LA PRIMA MEDIA.
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
San Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptxSan Giorgio e la leggenda del drago.pptx
San Giorgio e la leggenda del drago.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 

pattern

  • 2. Pattern ITERATOR ● Contesto: 1) Un oggetto (aggregato) contiene altri oggetti (elementi) 2) I clienti devono accedere a tutti gli elementi 3) L'aggregato non deve esporre la sua struttura interna 4) Più clienti devono poter accedere contemporaneamente ● Soluzione: 1) Definire una classe iteratore che recupera un elemento per volta 2) L'aggregato ha un metodo che restituisce un iteratore
  • 5. Paradigma Model­View­Controller (MVC) ● Dividere le responsabilità tra: – i dati di interesse (model) – la loro presentazione (view) – l'interazione con l'utente (controller) 5
  • 6. Esempio: editor di pagine HTML – Model: i caratteri che compongono la pagina ● classe HtmlPage – View: una vista carattere per carattere, o una vista  WYSIWYG (what you see is what you get) ● classi HtmlRawView, HtmlRenderedView – Controller: l'observer che riceve gli eventi dall'utente e  produce modifiche sul modello  ● classe InsertListener 6
  • 8. Pattern OBSERVER ● Contesto: – Un oggetto (soggetto) genera eventi – Uno o più oggetti (osservatori) vogliono essere informati del verificarsi di  tali eventi ● Soluzione: – Definire un'interfaccia con un metodo notify, che sarà implementata dagli  osservatori – Il soggetto ha un metodo (attach) per registrare un osservatore – Il soggetto gestisce l'elenco dei suoi osservatori registrati – Quando si verifica un evento, il soggetto informa tutti gli osservatori  registrati, chiamando il loro metodo notify 8
  • 11. Esempio: funzioni matematiche ● Studio di funzioni parametriche di una variabile reale ● Ad esempio, parabole –   a x2 + b x + c; variabile: x; parametri: a, b, c ● Model: la funzione ● View: il suo grafico, o una tabella di valori ● Controller: le classi che rispondono allo spostamento  degli slider e modificano i parametri della funzione 11
  • 13. Pattern STRATEGY ● Contesto: 1) Una classe (Context) può sfruttare diverse varianti di un algoritmo 2) I clienti della classe vogliono fornire versioni particolari dell'algoritmo ● Soluzione: 1) Definire un'interfaccia (Strategy) che rappresenti un'astrazione  dell'algoritmo 2) Per fornire una variante dell'algoritmo, un cliente costruisce un oggetto di  una classe (ConcreteStrategy) che implementa l'interfaccia Strategy e lo  passa alla classe Context 3) Ogni volta che deve eseguire l'algoritmo, la classe Context invoca il  corrispondente metodo dell'oggetto che concretizza la strategia 13
  • 17. Contenitori e componenti output: // un contenitore Container x = new Container(); x.setLayout(new FlowLayout()); // aggiungo un componente al contenitore x.add(new Jbutton(“qui”)); // aggiungo un altro componente al contenitore x.add(new Jbutton(“qua”)); // la finestra JFrame f = new JFrame();        Container c = f.getContentPane(); c.setLayout(new FlowLayout()); c.add(x); // x si comporta come un componente! c.add(new JButton(“quo”)); ... 17
  • 18. Pattern COMPOSITE ● Contesto: 1) Oggetti primitivi possono essere combinati in un oggetto composito 2) I clienti possono trattare un oggetto composito come primitivo ● Soluzione: 1) Definire un'interfaccia (Primitive) che rappresenti un'astrazione  dell'oggetto primitivo 2) Un oggetto composito contiene una collezione di oggetti primitivi  3) Sia gli oggetti primitivi che quelli compositi implementano  l'interfaccia Primitive 4) Nel realizzare un metodo dell'interfaccia Primitive, un oggetto  composito applica il metodo corrispondente a tutti i propri oggetti  primitivi, e poi combina i risultati ottenuti 18
  • 22. Pattern DECORATOR ● Contesto: 1) Si vuole decorare (ovvero migliorare, ovvero aggiungere  funzionalità a) una classe componente 2) Un componente decorato può essere utilizzato nello stesso modo di  uno normale 3) La classe componente non vuole assumersi la responsabilità della  decorazione 4) L'insieme delle decorazioni possibili non è limitato 22
  • 23. Pattern DECORATOR ● Soluzione: 1) Definire un'interfaccia (Component) che rappresenti un'astrazione  di un componente 2) Le classi concrete che definiscono componenti implementano  l'interfaccia Component 3) Definire una classe (Decorator) che rappresenta la decorazione 4) Un oggetto decoratore contiene e gestisce l'oggetto che decora 5) Un oggetto decoratore implementa l'interfaccia Component  6) Nel realizzare un metodo di Component, un oggetto decoratore  applica il metodo corrispondente all'oggetto decorato e ne combina  il risultato con l'effetto della decorazione 23
  • 27. Pattern TEMPLATE METHOD ● Contesto: 1) Un algoritmo è applicabile a più tipi di dati 2) L'algoritmo può essere scomposto in operazioni  primitive. Le operazioni primitive possono essere  diverse per ciascun tipo di dato 3) L'ordine di applicazione delle operazioni primitive non  dipende dal tipo di dato 27
  • 28. Pattern TEMPLATE METHOD ● Soluzione: 1) Definire una superclasse che abbia un metodo che realizza  l'algoritmo e un metodo per ogni operazione primitiva 2) Le operazioni primitive non sono implementate nella  superclasse (metodi astratti), oppure sono implementate in  modo generico 3) Ridefinire in ogni sottoclasse i metodi che rappresentano  operazioni primitive, ma non il metodo che rappresenta  l'algoritmo 28
  • 31. Pattern FACTORY METHOD ● Contesto: 1)Un tipo (creatore) crea oggetti di altro tipo (prodotto) 2)Le sottoclassi del tipo creatore devono creare prodotti di tipi  diversi 3)I clienti non hanno bisogno di sapere il tipo esatto dei  prodotti 31
  • 32. Pattern FACTORY METHOD ● Soluzione: 1)Definire un tipo per un creatore generico 2)Definire un tipo per un prodotto generico 3)Nel tipo creatore generico, definire un metodo (detto metodo  fabbrica) che restituisce un prodotto generico 4)Ogni sottoclasse concreta del tipo creatore generico realizza  il metodo fabbrica in modo che restituisca un prodotto  concreto 32