Lezione 09 - Abstract Factory

1,317 views
1,219 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,317
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
39
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione 09 - Abstract Factory

  1. 1. Ingegneria del Software
  2. 2. Introduzione al pattern…
  3. 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. 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
  5. 5. Soluzione al problema introduttivo n.2 Ingegneria del Software - A.A. 2003/2004
  6. 6. 1 2 3 Ingegneria del Software - A.A. 2003/2004
  7. 7. Presentazione del pattern Abstract Factory
  8. 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. 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. 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. 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. 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. 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. 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. 15. Il pattern Abstract Factory (8/8) • Related Patterns Factory Method, Singleton Ingegneria del Software - A.A. 2003/2004
  16. 16. Domande? Ingegneria del Software - A.A. 2003/2004

×