Lezione 04 - Factory method
-
Upload
marco-bianchi -
Category
Education
-
view
1.832 -
download
1
Transcript of Lezione 04 - Factory method
![Page 1: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/1.jpg)
Ingegneria del Software
![Page 2: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/2.jpg)
Introduzione al pattern…
![Page 3: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/3.jpg)
Ingegneria del Software - A.A. 2003/2004
Problema introduttivo
Come istanziare gli oggetti di tipo Document?Come istanziare gli oggetti di tipo Document?
![Page 4: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/4.jpg)
Presentazione del pattern Factory Method
![Page 5: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/5.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (1/10)
• Nome Factory Method [GoF95]
• Synopsis Il pattern permette di scrivere una classe che delega la creazione degli oggetti che usa, rendendola indipendente dalle rispettive classi
• Context - Situazioni in cui è desiderabile centralizzare la fase di creazione degli oggetti in una classe dedicata
- Esempio:Creazione di diversi tipi di documenti all’interno di un’applicazione da ufficio (documenti testuali, fogli di stile, ecc.)
[segue]
![Page 6: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/6.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (2/10)
![Page 7: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/7.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (3/10)
• Forces
– Una classe può creare oggetti senza conoscere a priori quali sono le sottoclassi di una data classe, o quali classi implementano una data interfaccia.
– L’insieme di classi che una classe può istanziare potrebbe essere dinamico nel tempo.
![Page 8: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/8.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (4/10)
• Solution - Gli “attori” del pattern Factory Method sono:– Product
Superclasse astratta o interface degli oggetti prodotti dallaFactory (es. Document)
– Concrete ProductOgni tipo di istanza creata dalla Factory (es. MyDocument)
– Creation RequestorClasse che delega la creazione di oggetti alla Factory
– Factory IFSpecifica delle “regole di comunicazione” con la Factory
– Factory ClassImplementazione della Factory
![Page 9: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/9.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (5/10)
Da Context…
![Page 10: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/10.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (6/10)
… a Solution
![Page 11: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/11.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (7/10)
• Consequences
- La classe che richiede la creazione è indipendente dalle classi degli oggetti “concrete product” che utilizza
- L’insieme degli oggetti “concrete product” che possono essere creati può cambiare dinamicamente
![Page 12: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/12.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (8/10)
• Implementation
- Se Factory può creare più tipi di “concrete product”, il metodo createProduct deve prendere necessariamente un parametro che gli permetta di decidere quale tipo di “concrete product” creare
- Il metodo createProduct può essere implementato con:- cascata di if- hash table indicizzata con i valori passati per
parametro contenente oggetti della classe:java.lang.reflect.Contructor
![Page 13: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/13.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (9/10)
• Java API usage - Nella classe URLConnection c’è un metodo chiamato getContent che restituisce il contenuto di una URL (es. pagina HTML, gif, jpg, ecc).Esercizio: Analizzare le API java e
riconoscere il pattern
• Code example - Esercizio: scrivere il codice dell’esempio presentato nella slide successiva
• Related Patterns - cfr. Abstract Factory, Template Method, Prototype
![Page 14: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/14.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (10/10)
![Page 15: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/15.jpg)
Ingegneria del Software - A.A. 2003/2004
Laboratorio
Il nome di una persona puòessere scritto in due modi:• Cognome, Nome• Nome Cognome
Scrivere uno programma chedivide Nome e Cognomecorrettamente utilizzando loschema del pattern Factory
![Page 16: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/16.jpg)
Ingegneria del Software - A.A. 2003/2004
Classe “Product”: Namer
![Page 17: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/17.jpg)
Ingegneria del Software - A.A. 2003/2004
Classe “ConcreteProduct”: FirstFirst
![Page 18: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/18.jpg)
Ingegneria del Software - A.A. 2003/2004
Classe “ConcreteProduct”: LastFirst
![Page 19: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/19.jpg)
Ingegneria del Software - A.A. 2003/2004
Classe “Factory”: NameFactory
![Page 20: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/20.jpg)
Ingegneria del Software - A.A. 2003/2004
Classe “CreationRequestor”
Nel costruttore della classe che utilizza la factory:
Il metodo lanciato quando si genera l’evento di bottone Compute premuto:
![Page 21: Lezione 04 - Factory method](https://reader037.fdocument.pub/reader037/viewer/2022102701/558fc7811a28ab804e8b476a/html5/thumbnails/21.jpg)
Ingegneria del Software - A.A. 2003/2004
Domande?