lezione 09 - abstract factory
TRANSCRIPT
![Page 1: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/1.jpg)
Ingegneria del Software
![Page 2: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/2.jpg)
Introduzione al pattern…
![Page 3: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/3.jpg)
Ingegneria del Software - A.A. 2003/2004
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?
![Page 4: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/4.jpg)
Ingegneria del Software - A.A. 2003/2004
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 famigliedi 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 poteristanziare il set di componenti giusto a seconda del tipo di computer da analizzare
![Page 5: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/5.jpg)
Ingegneria del Software - A.A. 2003/2004
Soluzione al problema introduttivo n.2
![Page 6: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/6.jpg)
Ingegneria del Software - A.A. 2003/2004
1
23
![Page 7: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/7.jpg)
Presentazione del pattern Abstract Factory
![Page 8: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/8.jpg)
Ingegneria del Software - A.A. 2003/2004
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
![Page 9: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/9.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (2/8)
• Forces - Un sistema che lavora con molti prodotti diversi dovrebbe funzionare indipendentemente dallo specifico prodotto
- E’ desiderabile poter configurare il sistema per lavorare con l’insieme di prodotti appartenenti ad una stessa famiglia
- Non si vuole legare il client ad una factory specifica, cioè ad una particolare famiglia di prodotti
Definizione interfacceper ogni prodotto
Definizione Factory
Definizione Abstract Factory
![Page 10: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/10.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (3/8)
… a SolutionDa Context…
• Solution –Gli “attori” del pattern sono:
– Client
– AbstractFactory
– ConcreteFactoryX
–WidgetY
– ProductXWidgetY
![Page 11: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/11.jpg)
Ingegneria del Software - A.A. 2003/2004
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
![Page 12: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/12.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (5/8)
• Implementation- E’ raccomandabile implementare la classe AbstractFactory
come classe astratta e il metodo getFactory come metodostatico
- Se il client deve lavorare con una famiglia di prodotti pervolta si può usare una variabile statica per settare la factoryconcreta 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 diversisistemi nativi di GUI
![Page 13: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/13.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (6/8)
• Code example
public class Client {
public void doIt () {ArchitectureToolkit af;af = ArchitectureToolkit.getFactory(ArchitectureToolkit.EMBER);CPU cpu = af.createCPU();//...
}}
Client
![Page 14: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/14.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (7/8)
public abstract class 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() ;
}
ArchitectureToolkit
![Page 15: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/15.jpg)
Ingegneria del Software - A.A. 2003/2004
Il pattern Abstract Factory (8/8)
• Related PatternsFactory Method, Singleton
![Page 16: Lezione 09 - Abstract Factory](https://reader038.vdocuments.site/reader038/viewer/2022103116/558fc9281a28ab64198b45d5/html5/thumbnails/16.jpg)
Ingegneria del Software - A.A. 2003/2004
Domande?