Qualcuno in un post StackOverflow (non ho aggiunto la domanda ai preferiti purtroppo) ha commentato che le fabbriche che restituiscono un solo tipo di oggetto sono un odore di codice.
Mi trovo a scrivere questo tipo di fabbriche molto spesso. A volte perché non voglio gonfiare il mio codice con sovraccarichi del costruttore e qualche volta perché voglio solo dare un nome a un oggetto con attributi specifici. Una fabbrica sarebbe quindi simile a questa:
class CarFactory {
public static Car createDefault() { return new Car(0, 0, 0, 0, 0, Color.BLACK) }
public static Car createFancy() { return new Car(1, 1, 1, 1, 1, Color.RAINBOW) }
...
}
Questo è solo un esempio generale, ma penso che le chiamate sembrino molto meglio nel codice rispetto alle chiamate del costruttore con un carico di valori minacciosi.
Tuttavia questi tipi di fabbriche di solito non prendono decisioni in fase di runtime (come spesso fanno i metodi di produzione). E probabilmente non creerò nemmeno le interfacce (come usa il pattern Abstract Factory Pattern). È solo una classe che fornisce metodi di creazione statici, in modo che il mio codice non diventi ingombrante e ho un solo metodo per cambiare se penso che una macchina di lusso dovrebbe essere rossa con strisce.
Questi tipi di Classi di Fabbriche sono necessariamente cattivi?