Disons que j'ai beaucoup de classes similaires (unités dans un RTS dans cet exemple), qui est, la classe Unit
, et les sous-classes UnitA
, UnitB
, UnitC
etc.Java Mauvais motif?
Toutes les classes de parts ont le constructeur suivant (unité comprenant)
public class UnitX {
public UnitX(FileReader fr) {
...read parameters for constructing the unit...
}
}
Mon fichier contenant les paramètres ont la forme
UnitX params
UnitY params
....
et la création d'une liste de toutes les unités dans un fichier serait une boucle while comme
Class[] params = {FileReader.class};
while(fr has more to read) {
String unitType = fr.getString();
Unit u = (Unit)
java.lang.reflect.Constructor constr = Class.forName(unitType).getConstructor(params);
Unit u = (Unit)constr.newInstance(new Object[]{fr});
list.add(u);
}
je réalisais que j'utilise ce modèle très souvent quand je crée des objets à partir de fichiers. Ma question est, est-ce un mauvais modèle? Y a-t-il une meilleure manière de faire cela?
N'est-il pas plus raisonnable que les classes d'unités fournissent elles-mêmes la méthode de lecture/écriture de leurs états à un lecteur/enregistreur de filer ? Une classe d'unité supplémentaire ne nécessiterait pas de modification de ma classe d'usine. –
Oui, c'est aussi possible, mais sachez que vous êtes en train de mélanger les responsabilités, mais tant que vous êtes conscient de cela et de ce que cela signifie, alors c'est ok. Les tests unitaires sont généralement intentionnellement simples, de sorte qu'une approche couplée plus directe est souvent la meilleure solution, car elle est plus claire. – mdma