Pattern Abstract Factory GoF

di il
2 risposte

Pattern Abstract Factory GoF

Salve a tutti,
Sto studiando il pattern "Abstract Factory" sul libro "Design Patterns, Elementi per il riuso di software ad oggetti" della GoF.

Alla pag. 90, al paragrafo Implementazione, punto 2 è riportato il seguente testo:
"Creazione dei prodotti: Abstract Factory dichiara soltanto un' interfaccia per la creazione dei prodotti, mentre la responsabilità della creazione effettiva delle istanze è delle sottoclassi ConcreteProduct. [...]

La cosa che non mi è chiara è perchè la creazione effettiva delle istanze è delle sottoclassi ConcreteProduct. Non dovrebbe essere responsabilità delle sottoclassi ConcreteFactory???

Inoltre questo pattern è riportato come un pattern creazionale basato sugli oggetti.
Non dovrebbe essere un pattern creazionale basato sulle classi, visto che il processo di creazione degli oggetti è affidato alle sottoclassi di AbstractFactory?

2 Risposte

  • Re: Pattern Abstract Factory GoF

    L'AF e' una classe per creare oggetti. Quali oggetti? Appunto, chi la usa non gli serve saperlo, ma ogni oggetto puo' essere creato con caratteristiche diverse, che dipendono dalla factory.

    Facciamo un esempio: ruote tonde, quadrate, triangolari.

    A te serve un oggetto per creare le ruote.
    Quale forma di ruote? Dipendera' dalla factory che istanzierai.
    Poi, il problema e', quali sono le proprieta' delle ruote?
    Per quelle tonde il raggio, per quelle quadrate il lato, per quelle triangolari almeno 2 angoli e un lato (non ho detto un triangolo equilatero!).

    Sara' responsabilita' della factory, assegnare questi valori alle ruote, e sara' compito di chi istanzia la factory indicare le proprieta' delle ruote da creare.

    Chi utilizza la factory (ovviamente non e' detto sia chi l'ha creata), non sa e non deve sapere quale forma ha la ruota, ma solo che e' una ruota!
  • Re: Pattern Abstract Factory GoF

    L'esempio è chiaro, ma non mi aiuta a risolvere i dubbi che ho posto.
    Come risponderesti alle domande che ho posto?
Devi accedere o registrarti per scrivere nel forum
2 risposte