Lezione 04 - Factory method

21
Ingegneria del Software

Transcript of Lezione 04 - Factory method

Page 1: Lezione 04 - Factory method

Ingegneria del Software

Page 2: Lezione 04 - Factory method

Introduzione al pattern…

Page 3: Lezione 04 - Factory method

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

Presentazione del pattern Factory Method

Page 5: Lezione 04 - Factory method

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

Ingegneria del Software - A.A. 2003/2004

Il pattern Factory Method (2/10)

Page 7: Lezione 04 - Factory method

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

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

Ingegneria del Software - A.A. 2003/2004

Il pattern Factory Method (5/10)

Da Context…

Page 10: Lezione 04 - Factory method

Ingegneria del Software - A.A. 2003/2004

Il pattern Factory Method (6/10)

… a Solution

Page 11: Lezione 04 - Factory method

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

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

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

Ingegneria del Software - A.A. 2003/2004

Il pattern Factory Method (10/10)

Page 15: Lezione 04 - Factory method

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

Ingegneria del Software - A.A. 2003/2004

Classe “Product”: Namer

Page 17: Lezione 04 - Factory method

Ingegneria del Software - A.A. 2003/2004

Classe “ConcreteProduct”: FirstFirst

Page 18: Lezione 04 - Factory method

Ingegneria del Software - A.A. 2003/2004

Classe “ConcreteProduct”: LastFirst

Page 19: Lezione 04 - Factory method

Ingegneria del Software - A.A. 2003/2004

Classe “Factory”: NameFactory

Page 20: Lezione 04 - Factory method

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

Ingegneria del Software - A.A. 2003/2004

Domande?