Il modello Metodo di fabbrica estrae il processo decisionale dalla classe chiamante. Questo ha diversi vantaggi:
Riutilizzo. Se voglio creare un'istanza in molti luoghi, non devo ripetere la mia condizione, quindi quando arrivo ad aggiungere una nuova classe, non corro il rischio di perderne una.
Unità-Testabilità. Posso scrivere 3 test per la factory, per assicurarmi che restituisca i tipi corretti nelle condizioni corrette, quindi la mia classe chiamante deve solo essere testata per vedere se chiama la factory e quindi i metodi richiesti sulla classe restituita. Non ha bisogno di sapere nulla sull'implementazione della fabbrica stessa o delle classi concrete.
Estensibilità. Quando qualcuno decide che dobbiamo aggiungere una nuova classe D a questa fabbrica, nessuno del codice chiamante, né test unitari o implementazione, deve mai essere detto. Creiamo semplicemente una nuova classe D ed estendiamo il nostro metodo di fabbrica. Questa è la definizione stessa di principio aperto-chiuso .
È anche possibile creare una nuova classe di fabbrica e renderli sostituibili a caldo, se la situazione lo richiede, ad esempio se si desidera poter attivare e disattivare la classe D durante il test. Mi sono imbattuto in questa situazione solo una volta, ma è stato estremamente utile.
Come è stato detto, il modello di fabbrica non è sempre la strada da percorrere. Ma, ovunque vedi un'istanza condizionale, dovresti pensarci un attimo.