Dovrebbe fare fabbriche concrete nello stesso numero di famiglie di oggetti o secondo fasi del mio problema?

1

Sto programmando un gioco. In questo gioco ho 3 fasi. Nella prima fase, c'è un obiettivo statico e uno sparatutto statico nel gioco. Nella seconda fase, l'obiettivo si sposterà. E nel terzo entrambi si stanno muovendo.

Voglio usare factory astratto per creare oggetti della stessa famiglia.

Voglio sapere quale dei seguenti progetti è giusto:

Con 2 fabbriche:

Con3fabbriche:

Non so se dovrei fare fabbriche concrete con lo stesso numero di famiglie alla mano destra o secondo il mio problema?

Ad esempio, nello scenario, ho due famiglie di oggetti (Prodotti). La prima famiglia è Gun e la seconda è Goal. Ma ho 3 fasi che ho spiegato sopra. È giusto avere 2 fabbriche per il conteggio delle famiglie di prodotti o per avere 3 famiglie secondo le fasi?

    
posta ConductedClever 12.12.2014 - 20:25
fonte

1 risposta

1

Per essere onesti, probabilmente prenderei un approccio completamente diverso. Costruivo 4 fabbriche, una per ogni tipo di oggetto. Creo quindi una nuova classe Level che contenga un'istanza di GunFactory e una di una GoalFactory e creerei 3 istanze di Level (probabilmente memorizzate in un elenco) ciascuna con la combinazione appropriata di factory.

Ci sono due ragioni per questo, una teorica e una pratica. A livello teorico, non è del tutto chiaro che le responsabilità "creare una pistola" e "creare un obiettivo" siano parte della stessa responsabilità, quindi il Modello di Responsabilità Unica afferma che dovremmo evitare di avere un singolo oggetto che lo fa. L'oggetto Livello ha invece una chiara responsabilità: "tenere insieme tutte le informazioni e il comportamento necessari per inizializzare un livello del gioco".

Il secondo aspetto, più pratico, è che ti consente di aggiungere nuovi livelli più facilmente di entrambi i tuoi suggerimenti originali. Di 'che vuoi aggiungere un quarto livello che usa di nuovo una combinazione diversa di pistola e obiettivo; nel tuo primo progetto dovresti cambiare il codice di inizializzazione esistente per scegliere un diverso set di fabbriche, nel secondo dovresti creare una nuova sottoclasse della tua classe factory astratta, mentre con il mio suggerimento devi semplicemente aggiungere un nuovo Livello di istanza alla lista, una singola linea cambia. (Questo potrebbe anche essere formulato teoricamente come "il design è più conforme al principio aperto / chiuso quando i livelli devono essere aggiunti", ma preferisco l'enfasi pratica qui).

    
risposta data 13.12.2014 - 11:29
fonte

Leggi altre domande sui tag