Bonjour

Pour mon application, qui sera un outil pour créer des personnages pour mon jeu, je fais appel au Design Pattern Decorator.
En effet, un personnage peut être à la fois Guerrier et Sorcier.

J'ai donc intégré, pour le moment, deux classes décoratrices : Guerrier et Sorcier.


Pour tester l'architecture, dans mon main je lance tout d'abord la construction du personnage.
Ensuite, je créé lui rajoute les caractéristiques du Guerrier, puis celles du Sorcier.
Ce qui donne le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
#include "Personnage.h"
#include "Guerrier.h"
#include "Sorcier.h"
 
 
using namespace std;
 
int main()
{
    PersonnageBase* pb = new Personnage();
    cout << "pb : " << endl;
    cout << "Nom : " << pb->getNom() << endl;
    cout << "Endurance : " << pb->getEndurance() << endl;
    cout << "Force : " << pb->getForce() << endl << endl;
 
    pb = new Guerrier(*pb);
    pb->setClasse("Guerrier");
    cout << "Warrior : " << endl;
    cout << "Classe : " << pb->getClasse() << endl;
    cout << "Endurance : " << pb->getEndurance() << endl;
    cout << "Force : " << pb->getForce() << endl <<  endl;
 
    pb = new Sorcier(*pb);
    pb->setClasse("Sorcier");
    cout << "Warrior/Witch : " << endl;
    cout << "Classe : " << pb->getClasse() << endl;
    cout << "Endurance : " << pb->getEndurance() << endl;
    cout << "Force : " << pb->getForce() << endl << endl;
 
 
    return 0;
}
Le problème est le suivant : comment garder les caractéristiques du Guerrier, et lui ajouter celles du Sorcier ?

Dès que je lui ajoute le décorateur Sorcier, les données sont remises à la valeur par défaut. Donc je perd tout ce que Guerrier avait ajouté au Personnage


Merci d'avance