Esistono due differenze principali tra i modelli di progettazione Metodo di fabbrica e Fabbrica astratta.
La differenza 1 è che il metodo di fabbrica si basa principalmente sull'ereditarietà. Una classe in un modo usa la sottoclasse per creare oggetti. Gli oggetti creati dipendono dalla sottoclasse utilizzata. Mentre Abstract Factory si basa sull'ereditarietà ma anche sulla composizione: un cliente "possiede" un'istanza di Abstract Factory per contenere una fabbrica di cemento.
La differenza 2 è che il Metodo Fabbrica crea un oggetto, mentre Fabbrica Astratta crea una famiglia di oggetti correlati.
Differenza 1 Capisco (anche se ho difficoltà a capire perché qualcuno preferirebbe sottoclasse una classe che ha bisogno di una fabbrica invece di "darle" una fabbrica usando la composizione [a meno che quella classe abbia già una sottoclasse]).
Ma la differenza 2 non capisco.
Perché il metodo Factory non può creare una famiglia di prodotti anziché un unico prodotto? Può certamente restituire una serie di prodotti della stessa famiglia. Tutti questi prodotti condividono un'interfaccia comune: il metodo può restituire un array di quel tipo. Perché si dice che questo metodo produce solo un prodotto?
Inoltre, un metodo factory all'interno di una sottoclasse concreta di una fabbrica astratta crea prodotti diversi usando metodi diversi che vengono chiamati dal client.
Perché una fabbrica concreta nel modello Metodo di fabbrica non può fare lo stesso? Hai diversi metodi di fabbrica per diversi prodotti?