Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 50 di 112
  • livello avanzato
Indice lezioni

Factory Pattern

Pattern creazionale che semplifica la creazione di oggetti in situazioni in cui abbiamo molte impostazioni o differenze di contesto.
Pattern creazionale che semplifica la creazione di oggetti in situazioni in cui abbiamo molte impostazioni o differenze di contesto.
Link copiato negli appunti

Il Factory Pattern è un pattern creazionale che ha l'obiettivo di semplificare la creazione di oggetti in situazioni in cui abbiamo un'alta varietà di impostazioni iniziali oppure quando l'istanza di oggetto da creare dipende dal contesto in cui ci troviamo.

Proviamo ad introdurre il pattern con un esempio, immaginando di dover consentire la creazione di veicoli con caratteristiche specificate al momento della creazione. Il seguente codice mostra come può essere risolto il problema sfruttando il Factory Pattern:

var veicoloFactory = {
	creaVeicolo: function(opzioni) {
		var veicolo;
		if (opzioni && opzioni.length) {
			switch (opzioni.tipo) {
				case "auto":
					veicolo = new Automobile(opzioni);
					break;
				case "moto":
					veicolo = new Moto(opzioni);
					break;
				case "camion":
					veicolo = new Camion(opzioni);
					break;
			}
		}
	};
};

Abbiamo definito un oggetto veicoloFactory che mette a disposizione il metodo creaVeicolo() il cui compito è la creazione di un oggetto-veicolo con le caratteristiche specificate nelle opzioni. In particolare, l'opzione tipo determina il tipo di veicolo che vogliamo ottenere e fa in modo che all'interno del Factory venga invocato un costruttore diverso.

Un esempio d'uso del metodo creaVeicolo() è mostrato di seguito:

var myAutomobile = veicoloFactory.creaVeicolo({tipo: "auto", colore: "rosso", modello: "berlina"});

Dall'esterno dell'oggetto Factory non si ha idea del modo in cui viene generato l'oggetto richiesto. Questo fa sì che l'eventuale aggiunta della possibilità di creare un nuovo tipo di veicolo, ad esempio un autobus, non richieda l'utilizzo di un nuovo metodo, ma riutilizza lo stesso metodo creaVeicolo() con la possibilità di specificare un nuovo tipo:

var myAutobus = veicoloFactory.creaVeicolo({tipo: "bus", colore: "giallo"});

Ti consigliamo anche