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:
Dichiara l'interfaccia per le operazioni che creano i prodotti astratti.
Implementa le operazioni per creare i prodotti concreti.
Dichiara l'interfaccia per un tipo di oggetto prodotto.
Implementa l'interfaccia AbstractProduct e definisce l'oggetto prodotto che deve essere creato dalla factory concreta corrispondente.
Utilizza solo le interfacce dichiarate da AbstractFactory e AbstractProduct.