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.

Fonte Wikipedia