[Design patterns in Java] Factory
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 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.
[VIDEO]