Categorie
Javascript Programmazione

{JS} Factory Pattern

Cos’è il Factory Pattern?

Il Factory Pattern è anch’esso un pattern creazionale;
Ci aiuta a semplificare la creazione di una serie di oggetti nella situazioni in cui abbiamo di fronte una gran varietà di impostazioni/dati iniziali. 

Scopo

Lo scopo è automatizzare sotto un unica funzione la creazione di oggetti, differenti nella loro struttura, direzionando e veicolando il percorso da seguire esaminando un dato-pilota/punto di riferimento che ne determina la diversità.

Scenario

Supponiamo di avere di fronte tre tipi differenti di annunci e tre differenti costruttori di oggetti le cui proprietà variano in base alla natura/tipo di annuncio:

function Immobile(dati){
this.tipo=dati[0];
this.contratto=dati[1];
this.mq=dati[2];
this.accessori=dati[3];
}
function Automobile(dati){
this.tipo=dati[0];
this.km=dati[1];
this.alimentazione=dati[2];
this.porte=dati[3];
}

function Moto(dati){
this.tipo=dati[0];
this.km=dati[1];
this.alimentazione=dati[2];
this.modello=dati[3];
}

Tutti e tre i costruttori accettano come parametro, una variabile di nome “dati”, che, nel nostro esempio, sarà un array contenente tutte le informazioni necessarie alla creazione di un annunci di Immobili, Automobili e Moto.

var laMiaAuto = ["Automobile", 1570000, "benzina", 5];

Il dato-pilota sarà la prima voce con valore “Automobile” primo elemento con indice 0 del nostro array.

Il Factory Pattern

Attraverso la creazione del nostro Factory Pattern saremo in grado di prendere in esame il primo valore, dato-pilota, di un array e di veicolare le informazioni verso il costruttore desiderato; questo ci consentirà di generare numerosi oggetti attraverso la semplice invocazione di un metodo specifico da noi creato.

var fabbricaDiAnnunci = {
	creaAnnuncio: function(dati) {
        var annuncio;
  		if (dati && dati[0]) {
			switch (dati[0]) {
				case "Immobile":
					annuncio = new Immobile(dati);
					break;
				case "Automobile":
					annuncio = new Automobile(dati);
					break;
				case "Moto":
					annuncio = new Moto(dati);
					break;
			}
		}
        return annuncio;
	}
};

Abbiamo definito un oggetto “fabbricaDiAnnunci” che ha a disposizione un metodo “creaAnnuncio()”.
Il metodo creaAnnuncio() ha il compito di creare un oggetto con le caratteristiche dei dati ad esso passati.
All’interno del nostro metodo iniziamo con l’inizializzare una variabile-contenitrice “annuncio” che conterrà l’oggetto che verrà creato; successivamente attraverso un istruzione “if” verifichiamo che: i dati esistano ovvero che siano stati passati e che il primo valore del nostro array sia presente; questa sarà il valore-pilota.
Con l’istruzione “switch” invece, verifichiamo la natura del valore-pilota e indirizziamo i dati verso il corretto costruttore.

Se il primo valore dell’array è uguale a:
“Immobile” > new Immobile()
“Automobile” > new Automobile()
“Moto” > new Moto()

Infine restituiamo al metodo l’oggetto creato che in alternativa rimarrebbe intrappolato all’interno dell’istruzione if.

return annuncio;

L’utilizzo è abbastanza semplice potremo ora quindi utilizzare l’oggetto
fabbricaAnnunci ed il suo metodo creaAnnuncio() per creare molteplici oggetti semplicemente passandogli un array di valori avendo premura che la prima voce contenga sempre uno dei valori “Immobile”, “Automobile” o “Moto.

var myAutomobile;
myAutomobile=fabbricaAnnunci.creaAnnuncio(["Automobile", 1570000, "benzina", 5]);

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *