Design Pattern in PHP: Factory

di: Gabriele Farina     01 Settembre 2006

Il pattern Factory è un altro dei pattern più utilizzati nello sviluppo object oriented. Come Abstract Factory, analizzato in un articolo precedente, fa parte del gruppo dei pattern creazionali ed ha come scopo quello di fornire una classe capace di creare differenti implementazioni di un solo prodotto astratto.

Nella pratica risulta molto utile nelle situazioni in cui un metodo deve restituire istanze di classi diverse in base ad alcuni parametri passati. Grazie a PHP, che non ha un forte controllo sui tipi di dato, le istanze restituite dalla factory possono derivare da qualunque classe mentre la definizione del pattern richiede che tutte le classi generate da una factory implementino una medesima interfaccia.

Anche se non è necessario, è comunque importante seguire questo concetto per avere una totale congruenza con il pattern e per evitare problemi a chi utilizzerà (anche noi stessi) la nostra implementazione: se un metodo restituisce un oggetto, è bene che questo possa essere utilizzato indipendentemente dal suo comportamento specifico.

Struttura del pattern

Il pattern Factory è strutturato da quattro elementi che interoperano tra loro:

  • Product: è l'interfaccia che viene implementata da tutti gli oggetti che il ConcreteCreator è in grado di generare. Usando un'interfaccia ci assicuriamo congruenza nell'utilizzo delle istanze restituite dal ConcreteCreator;
  • ConcreteProduct: è l'implementazione dell'interfaccia Product che dona un comportamento specifico ai prototipi dei metodi definiti nell'interfaccia implementata. I ConcreteProduct possono essere più di uno e vengono generati dal ConcreteCreator in base a determinate condizioni (che possono essere lo stato dell'applicazione, i parametri passati al metodo che genera i prodotti, ecc ...);
  • Creator: è l'interfaccia che viene implementata dai ConcreteCreator e definisce il prototipo di un metodo che si occupa di generare istanze di ConcreteProduct. Spesso l'interfaccia viene definita come una classe astratta che fornisce un'implementazione standard del metodo factory che restituisce il prodotto di default;
  • ConcreteCreator: è l'implementazione dell'interfaccia Creator che sovrascrive il metodo factory per restituire istanze di ConcreteProduct specifici.

In generale si opera specificando Creator come una classe astratta e fornendo un'implementazione del metodo factory che restituisce l'istanza di uno dei ConcreteProduct definiti (che verrà stabilito come prodotto di default). Poi si definiscono varie implementazioni dell'interfaccia Product ed eventualmente varie implementazioni dell'interfaccia Creator che possono generare set di ConcreteProduct differenti. L'obiettivo è comunque quello di lasciare lasciar decidere quale istanza di ConcreteProduct creare al ConcreteCreator.
Vediamo un esempio della struttura UML utilizzata per descrivere questo pattern:

Figura 1: la struttura UML del pattern Factory

La struttura UML del pattern Factory

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti