L'obiettivo del modello Factory è di impedirci di sovvertire o riscrivere le funzioni che istanziano?

1

link

CreateMaze è la funzione che crea un'istanza degli oggetti. IMO, secondo lo schema di fabbrica non dovremmo sovraccaricare o modificare o riscrivere la funzione che crea l'istanza degli oggetti.

Ma nell'esempio, la funzione CreateMaze restituisce un labirinto *. Quindi, ora se dobbiamo scrivere una classe EnchangedMaze, dovremo riscrivere la funzione CreateMaze per restituire un puntatore di EnchantedMaze?

Da: link

Changing the layout means changing this member function, either by overriding it—which means reimplementing the whole thing—or by changing parts of it—which is error-prone and doesn't promote reuse.

Non è questo che il modello di fabbrica vuole evitare?

Che punto mi manca?

    
posta Aquarius_Girl 12.01.2017 - 07:08
fonte

2 risposte

2

Hai frainteso lo scopo del modello.

Il punto di un modello non è mai che non dovresti cambiare nulla mai più. Sei l'autore del sistema, quando i requisiti cambiano (e loro cambieranno ), avrai per cambiare le parti corrispondenti. Nessuna classe è al sicuro da quella.

Il punto specifico del pattern factory è che un programma client (possibilmente scritto da qualcun altro) non ha per conoscere il tipo specifico restituito dalla fabbrica, ma solo l'interfaccia che è stata scritto a In questo modo, quando il proprietario della factory modifica l'implementazione Car da GasGuzzlerCar a ElegantElectricCar , il programma client non deve essere riscritto perché utilizza solo il tipo Car .

L'alternativa sarebbe che il venditore esporti il tipo GasGuzzlingCar e poi interrompa tutti i client ogni volta che quel tipo cambia. Questa è chiaramente la soluzione inferiore. Quindi, lo scopo della fabbrica è isolare i client di una libreria rispetto alle modifiche all'interno della libreria , in particolare le modifiche che potrebbero fuoriuscire dalla libreria tramite dichiarazioni di tipo.

    
risposta data 12.01.2017 - 10:45
fonte
-2

"Factory" introduce effettivamente un metodo che non dovrebbe essere modificato o sovrascritto. "Metodo di fabbrica" d'altra parte è un modello completamente diverso, un caso speciale di "Fabbrica astratta". L'unica cosa che è comune tra "Fabbrica" e "Fabbrica astratta" sono entrambi modelli creativi.

Non c'è alcuna contraddizione nell'articolo collegato in quanto non descrive "Fabbrica".

    
risposta data 12.01.2017 - 07:23
fonte

Leggi altre domande sui tag