Je passe environ 2 heures à lire beaucoup de sujets liés à l'usine et je ne suis toujours pas sûr que ce serait la bonne approche.Création de classe paramétrée avec affirmation de la présence de paramètres. Utiliser l'usine?
Voici la chose: j'ai un ennemi classe qui a contient des variables membres comme nom _ et santé _. Je veux créer des instances de celui-ci avec des valeurs différentes de ces variables membres et ma première approche a consisté à obtenir les paramètres d'un tableau statique avec les propriétés:
Enemy::Enemy(int type) : name_(properties[type].name),
health_(properties[type].health)
{
...
}
Le problème ici est que je ne peux pas vérifier si la tableau propriétés est déjà rempli. Je devrais le vérifier de l'extérieur en appelant une fonction Enemy :: initArray() statique mais cela annulerait l'encapsulation de la classe Enemy.
Est-ce le temps de créer une fabrique qui initialise la matrice dans son constructeur? Et puis créez ennemis avec:
Enemy* EnemyFactory::create(type);
je lis que généralement les usines sont créées lorsque vous avez des hiérarchies de classes complexes ou l'appelant usine n'a besoin que de connaître l'interface des classes créées. J'ai seulement besoin de l'encapsulation de la création et de la vérification du tableau. Y a-t-il une solution "plus légère"?
EDIT: Je vais essayer d'être plus clair:
1.) Je pense que je sais comment pour créer une usine. La question principale est de savoir s'il existe une alternative !
2.) Je ne veux pas définir les propriétés à l'intérieur de l'objet mais utiliser des listes d'initialisation. Si je fais le premier je peux juste vérifier le tableau dans le constuctor et n'ai pas besoin de l'usine du tout.
C'est ce que je voulais. Aussi peu de code que possible tout en maintenant l'encapsulation de la classe. En fait assez facile mais je n'ai pas pensé à une méthode statique simple en tant que constructeur. Je vous remercie! – problemofficer
Les solutions 2 et 3 ne sont-elles pas essentiellement les mêmes? Les deux créent une fonction factice/usine qui vérifie les paramètres et initialise la classe avec des paramètres ou avec l'initialisation des paramètres. – problemofficer
@problemofficer: J'ai ajouté un exemple d'option 2, pour montrer en quoi il diffère de 3 –