[Design patterns in Java] Factory

Definizione

Il pattern Factory consente di delegare la creazione degli oggetti ad una opportuna classe, liberando il client da questa incombenza.

Classificazione

Il pattern Factory è classificato tra i pattern creazionali.

Problema e campo di applicazione

Il pattern si dimostra estremamente utile nel momento in cui non è noto a priori il tipo degli oggetti da creare e si vuole disaccoppiare il client dalla factory.

Allo stesso modo, centralizzando il processo di creazione, è molto più semplice modificare (aggiunta/rimozione) i vari tipi supportati.

Ad esempio, come proposto di seguito, supponiamo di dover disegnare delle forme geometriche che saranno scelte a runtime dall’utente attraverso una GUI. In questo caso il pattern Factory risolve il problema consentendo di istanziare l’oggetto adatto in base alla selezione.

Allo stesso tempo il client non dove conoscere i dettagli implementativi.

Soluzione

Partiamo definendo un’interfaccia FiguraGeometrica con un singolo metodo pubblico disegna() che al momento non restituisce alcun valore, ma stampa un messaggio semplicemente per indicare quale oggetto è stato creato.

In generale questa interfaccia definisce i metodi che saranno poi implementati nelle varie classi concrete, come Cerchio, Rettangolo e Triangolo nel nostro esempio.

A questo punto definiamo una classe FiguraGeometricaFactory con un metodo statico (che evita di istanziare la factory) createFiguraGeometrica() che riceve in input il tipo della figura da creare e restituisce un oggetto di tipo FiguraGeometrica.

Utilizzando come tipo di ritorno l’interfaccia, ci si libera da una particolare implementazione e si ha maggiore libertà d’azione.

Il tipo della figura può essere rappresentato mediante un’enumerazione in modo da stabilire esattamente quali sono i valori ammessi.

Nel nostro caso si tratta di CERCHIO, RETTANGOLO e TRIANGOLO.

Il metodo createFiguraGeometrica() presenta un blocco switch in cui viene valutato il valore dell’enumerazione ed istanziato il corrispondente oggetto.

Il codice di esempio è disponibile su GitHub.

—-> [VIDEO PLAYLIST] <—-

INDICE DESIGN PATTERNS

 

 

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Utilizzando il sito, accetti l'invio dei cookies da parte nostra. Maggiori informazioni

Questo sito utilizza i cookies per fornire la migliore esperienza di navigazione possibile. Continuando ad utilizzarlo senza modificare le impostazioni o cliccando su "Accetta" acconsenti al loro utilizzo.

Chiudi