Abstract factory
L'Abstract Factory fornisce un'interfaccia per creare famiglie di oggetti connessi o dipendenti tra loro, in modo che non ci sia necessità da parte dei client di specificare i nomi delle classi concrete all'interno del proprio codice.
In questo modo si permette che un sistema sia indipendente dall'implementazione degli oggetti concreti e che il client, attraverso l'interfaccia, utilizzi diverse famiglie di prodotti.
Questo pattern è utile quando:
- Si vuole un sistema indipendente da come gli oggetti vengono creati, composti e rappresentati.
- Si vuole permettere la configurazione del sistema come scelta tra diverse famiglie di prodotti.
- Si vuole che i prodotti che sono organizzati in famiglie siano vincolati ad essere utilizzati con prodotti della stessa famiglia.
- Si vuole fornire una libreria di classi mostrando solo le interfacce e nascondendo le implementazioni.
AbstractFactory
Dichiara l'interfaccia per le operazioni che creano i prodotti astratti.
ConcreteFactory
Implementa le operazioni per creare i prodotti concreti.
AbstractProduct
Dichiara l'interfaccia per un tipo di oggetto prodotto.
ConcreteProduct
Implementa l'interfaccia AbstractProduct e definisce l'oggetto prodotto che deve essere creato dalla factory concreta corrispondente.
Client
Utilizza solo le interfacce dichiarate da AbstractFactory e AbstractProduct.