Post on 28-Jun-2015
Ingegneria del Software
Introduzione al pattern…
Ingegneria del Software - A.A. 2003/2004
Problema introduttivo
Come istanziare gli oggetti di tipo Document?Come istanziare gli oggetti di tipo Document?
Presentazione del pattern 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]
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (2/10)
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.
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
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (5/10)
Da Context…
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (6/10)
… a Solution
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
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
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
Ingegneria del Software - A.A. 2003/2004
Il pattern Factory Method (10/10)
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
Ingegneria del Software - A.A. 2003/2004
Classe “Product”: Namer
Ingegneria del Software - A.A. 2003/2004
Classe “ConcreteProduct”: FirstFirst
Ingegneria del Software - A.A. 2003/2004
Classe “ConcreteProduct”: LastFirst
Ingegneria del Software - A.A. 2003/2004
Classe “Factory”: NameFactory
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:
Ingegneria del Software - A.A. 2003/2004
Domande?