GeeksforGeeks (Italiano)

Il metodo Factory è un modello di progettazione creazionale, cioè relativo alla creazione di oggetti. In Factory pattern, creiamo oggetti senza esporre la logica di creazione al client e il client utilizza la stessa interfaccia comune per creare un nuovo tipo di oggetto.
L’idea è di utilizzare una funzione membro statica (metodo factory statico) che crea & restituisce istanze, nascondendo i dettagli dei moduli di classe all’utente.

Un modello di fabbrica è uno dei principi fondamentali di progettazione per creare un oggetto, consentendo ai clienti di creare oggetti di una libreria (spiegata di seguito) in modo tale da non avere un accoppiamento stretto con la gerarchia di classi della libreria.

Cosa si intende quando parliamo di libreria e client?
Una libreria è qualcosa che è fornito da una terza parte che espone alcune API pubbliche e i client effettuano chiamate a quelle API pubbliche per completare il suo compito. Un esempio molto semplice può essere diversi tipi di visualizzazioni fornite dal sistema operativo Android.

Perché il pattern di fabbrica?
Comprendiamolo con un esempio:



Risultato:

I am two wheeler

Quali sono i problemi con il design precedente?
Come avrai notato nell’esempio precedente, il Cliente crea oggetti di TwoWheeler o FourWheeler basato su alcuni input durante la costruzione del suo oggetto.
Supponiamo che la libreria introduca una nuova classe ThreeWheeler per incorporare anche veicoli a tre ruote. Cosa succederebbe? Il cliente finirà per concatenare un nuovo altro se nella scala condizionale per creare oggetti di ThreeWheeler. Che a sua volta richiederà che il client venga ricompilato. Quindi, ogni volta che viene apportata una nuova modifica a lato della libreria, il Cliente dovrà apportare alcune modifiche corrispondenti alla sua fine e ricompilare il codice. Suona male? Questa è una pessima pratica di design.

Come evitare il problema?
La risposta è: creare un metodo statico (o factory). Vediamo di seguito il codice.



Risultato:

I am three wheeler

Nell’esempio precedente, abbiamo completamente disaccoppiato la selezione del tipo per la creazione dell’oggetto dal client. La libreria è ora responsabile di decidere quale tipo di oggetto creare in base a un input. Il client deve solo effettuare una chiamata al metodo Create di fabbrica della libreria e passare il tipo desiderato senza preoccuparsi dell’effettiva implementazione della creazione di oggetti.

Grazie a Rumplestiltskin per aver fornito la spiegazione sopra.

Altri esempi di metodo di fabbrica:

  1. Supponiamo che in un sistema di “disegno”, a seconda dell’input dell’utente, si possano disegnare immagini diverse come quadrato, rettangolo, cerchio. Qui possiamo utilizzare il metodo factory per creare istanze a seconda dell’input dell’utente. Per aggiungere un nuovo tipo di forma, non è necessario modificare il codice del cliente.
  2. Un altro esempio: nel sito di viaggi, possiamo prenotare il biglietto del treno, l’autobus e il biglietto aereo. In questo caso l’utente può indicare il suo tipo di viaggio come “autobus”, “treno” o “volo”.
    Qui abbiamo una classe astratta “AnyTravel” con una funzione membro statica “GetObject” che, a seconda del tipo di viaggio dell’utente, crea & oggetto di restituzione di “BusTravel” o “TrainTravel”. “BusTravel” o “TrainTravel” hanno funzioni comuni come nome del passeggero, origine, parametri di destinazione.

Grazie ad Abhijit Saha che fornisce i primi 2 esempi.

Write a Comment

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