3. Problema introduttivo n.1
• Si deve realizzare un’applicazione con GUI in grado di
lavorare su piattaforme diverse (es. MS-Windows, MacOS,
ecc).
• Il look and feel delle GUI dipende dalla piattaforma.
• Si crea una classe astratta per ogni oggetto grafico (text
field, list box, ecc.) a poi si scrivono le relative sottoclassi
concrete per ogni piattaforma considerata.
• Per rendere robusta l’applicazione bisogna assicurarsi che
tutti gli oggetti creati siano quelli progettati per funzionare
sulla piattaforma che si sta utilizzando
Come ottenere questa garanzia?
Come ottenere questa garanzia?
Ingegneria del Software - A.A. 2003/2004
4. Problema introduttivo n.2
• Si deve realizzare un programma che permette di eseguire in
remoto procedure di diagnostica sui computer prodotti dalla Stellar
Microsystem
• La Stellar ha progettato due famiglie
di computer che si distinguono per le
diverse architetture hardware, con
componenti solo funzionalmente
simili:
– Chip CPU di Enginola
– Chip in tecnologia RISC
chiamati ember, superember
e ultraember
• Il programma di diagnostica deve poter
istanziare il set di componenti giusto a
seconda del tipo di computer da analizzare
Ingegneria del Software - A.A. 2003/2004
8. Il pattern Abstract Factory (1/8)
• Nome Abstract Factory [GoF95], conosciuto anche con il
nome di Kit Pattern o Toolkit Pattern
• Synopsis Presenta un interfaccia per la creazione di
famiglie di prodotti, in modo tale che il cliente
non abbia conoscenza delle loro classi concrete.
Questo consente:
- di assicurarsi che il client crei soltanto prodotti
vincolati fra di loro
- l’utilizzo di diverse famiglie di prodotti da parte
dello stesso client.
• Context Cfr. esempio introduttivo
Ingegneria del Software - A.A. 2003/2004
9. Il pattern Abstract Factory (2/8)
• Forces - Un sistema che lavora con molti prodotti diversi
dovrebbe funzionare indipendentemente dallo
specifico prodotto Definizione interfacce
per ogni prodotto
- E’ desiderabile poter configurare il sistema per
lavorare con l’insieme di prodotti appartenenti
ad una stessa famiglia Definizione Factory
- Non si vuole legare il client ad una factory
specifica, cioè ad una particolare famiglia di
prodotti Definizione Abstract Factory
Ingegneria del Software - A.A. 2003/2004
10. Il pattern Abstract Factory (3/8)
Da Context…
… a Solution
• Solution –
Gli “attori” del
pattern sono:
– Client
– AbstractFactory
– ConcreteFactoryX
– WidgetY
– ProductXWidgetY
Ingegneria del Software - A.A. 2003/2004
11. Il pattern Abstract Factory (4/8)
• Consequences
- E’ facile aggiungere nuove famiglie di prodotti
- L’AbstractFactory assicura la creazione e l’utilizzo
di una famiglia consistente di oggetti
- Può risultare molto impegnativo aggiungere nuovi
widget o modificare uno già esistente
Ingegneria del Software - A.A. 2003/2004
12. Il pattern Abstract Factory (5/8)
• Implementation
- E’ raccomandabile implementare la classe AbstractFactory
come classe astratta e il metodo getFactory come metodo
statico
- Se il client deve lavorare con una famiglia di prodotti per
volta si può usare una variabile statica per settare la factory
concreta da usare
- Cfr. voce implementation del pattern Factory Method
• Java API usage
- La classe java.awt.Toolkit è una abstract factory usata per
creare oggetti che interagiscono correttamente con i diversi
sistemi nativi di GUI
Ingegneria del Software - A.A. 2003/2004
13. Il pattern Abstract Factory (6/8)
• Code example
public class Client
Client {
public void doIt () {
ArchitectureToolkit af;
af = ArchitectureToolkit.getFactory(ArchitectureToolkit.EMBER);
CPU cpu = af.createCPU();
//...
}
}
Ingegneria del Software - A.A. 2003/2004
14. Il pattern Abstract Factory (7/8)
public abstract class ArchitectureToolkit
ArchitectureToolkit {
public final static int ENGINOLA = 900;
public final static int EMBER = 901;
// ...
static final ArchitectureToolkit getFactory(int architecture) {
switch (architecture) {
case ENGINOLA:
return new EnginolaToolkit();
case EMBER:
return new EmberToolkit();
// ...
}
}
public abstract CPU createCPU() ;
public abstract MMU createMMU() ;
}
Ingegneria del Software - A.A. 2003/2004
15. Il pattern Abstract Factory (8/8)
• Related Patterns
Factory Method, Singleton
Ingegneria del Software - A.A. 2003/2004