Quindi sto scrivendo un gioco e mi sono imbattuto in un enigma in cui credo che Reflection potrebbe essere una soluzione migliore. Ma sapendo che Reflection è scoraggiato e la mia altra soluzione non sembra così carina, ho pensato di chiedere qui e vedere cosa è in realtà un'idea migliore in questo scenario.Potrei farlo molto più semplice con Reflection. Dovrei?
In sostanza ho una classe di carta astratta, e avrà diverse implementazioni di esso. Ho un caso in cui mi viene dato il nome di una carta e ho bisogno di costruirne un oggetto, dato solo il nome.
So che avrei potuto utilizzare:
a) Riflessione e utilizzare forName e invocare. Sarà un codice molto corto, scalabile e facile da scrivere. Detto questo, è Reflection, e io sono tutto per evitarlo quando non ne ho particolarmente bisogno.
b) Utilizzare un modello di progettazione di fabbrica e poi hanno un controllo condizionale gigante, chiamando la classe appropriata in base al nome fornisco. Non è difficile da scrivere ma richiede una manutenzione costante e impiegherà un po 'di tempo a scrivere, inoltre non sarà scalabile. Detto questo, è una soluzione senza riflessione.
Quindi qual è la soluzione ideale? Uso semplicemente Reflection perché mantiene il mio codice piacevole e breve?
Riflessione! Riflessione! Riflessione! –
La preferenza personale è "B". È generalmente una scelta più sicura e consente una soluzione configurabile (è possibile caricare una 'mappa' di nomi da un file che corrisponde alla classe che dovrebbe essere istanziata, ad esempio). Ogni volta che pensi che la riflessione sia la risposta giusta, hai un problema con il tuo design. Dico questo mentre utilizzo la riflessione in un paio di punti e sono sempre alla ricerca di modi per ridurlo ... 'Class.forName' non è necessariamente un riflesso;) – MadProgrammer
Perché non utilizzare un modello di progettazione Factory e iniziare con il tuo riflettente implementazione. Personalmente potrei considerare un design basato su un [Prototipo] (http://en.wikipedia.org/wiki/Prototype_pattern) (dal momento che un mazzo ha un numero così limitato di carte/semi). –