Perché il pattern Metodo di fabbrica non può creare una famiglia di oggetti? [duplicare]

1

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?

    
posta Aviv Cohn 20.03.2014 - 14:57
fonte

1 risposta

1

Devi capire che il metodo di fabbrica si riferisce alla funzionalità di una fabbrica, mentre la fabbrica astratta fa riferimento alla funzionalità di una fabbrica di fabbriche . La risposta collegata da @pdr si espande ulteriormente su questo punto.

Per indirizzare direttamente la tua preoccupazione principale,

Difference 2 is that Factory Method creates one object, while Abstract Factory creates a family of related objects.

Il metodo Factory restituisce una singola implementazione per la funzionalità richiesta, cioè restituisce un FinancialManager o un OperationsManager per soddisfare la necessità di un IManager .

Una Fabbrica astratta restituirà una fabbrica che ti fornisce le implementazioni effettive, cioè restituisce un FinancialFactory o un OperationsFactory come implementazione per un IProfessionalFactory . Ognuno di questi implementa la propria versione di BuildManager() -> IManager ; tuttavia, potrebbero anche implementare altri metodi per creare una famiglia di oggetti correlati, ad esempio BuildEngineer() -> IEngineer o BuildAssistant() -> IAssistant , ognuno dei quali restituisce un'implementazione relativa alle operazioni o finanziaria in base all'utilizzo di FinancialFactory o OperationsFactory .

    
risposta data 20.03.2014 - 17:12
fonte

Leggi altre domande sui tag