Bene, probabilmente vale la pena menzionare che ci sono due modelli qui: Pattern metodo di fabbrica e Modello di fabbrica astratto .
Lo schema del metodo di fabbrica è ciò che descrivi. Una classe real è responsabile della creazione di tutte le istanze. Non c'è nulla di astratto in questo. Il vantaggio è che la creazione delle istanze è separata dal loro utilizzo.
Ma cosa succede quando la creazione di ogni istanza diventa selvaggiamente diversa da quella successiva e / o la tua classe è ingombra di gigantesche catene if-else?
Il modello di fabbrica astratto è il prossimo passo che affronta questo problema. Rende anche la creazione di ogni oggetto completamente flessibile e potenzialmente nella sua stessa classe. Ad esempio, anziché connettersi a un database, ognuno con i propri parametri e la stringa di connessione, tutti concatenati in una singola classe factory complessa, si creano implementazioni di una fabbrica astratta, ciascuna implementazione focalizzata su un singolo database.
Il vantaggio in definitiva rimane lo stesso, tuttavia è possibile farlo senza avere una classe factory reale eccessivamente complicata. Ovviamente, se puoi fare solo con la classe del metodo factory, usa questo. Non è necessario implementare un modello di fabbrica astratto quando il modello di metodo di fabbrica andrà bene.
Quindi, per rispondere alla tua domanda, il motivo per cui chiameresti il modello astratto di fabbrica astratto è perché ogni fabbrica stessa deriva da una fabbrica astratta.