J'ai vraiment du mal avec cette idée de mettre des variables dans une classe état.
L'état d'une machine à état, c'est l'union de la valeur de tous ses membres. Autrement dit, tout ce qui caractérise l'état de la machine, doit être dans la classe machine.
Sinon, je vois une grosse différence sémantique entre ce que tu fais et l'implémentation initiale :
1 2 3 4
| void ChangeState( AbstractState * newState ) {
delete m_state;
m_state = newState;
} |
m_state est à priori un état nouvellement créé (je vois mal comment faire autrement).
Tandis que :
void GoToState1() { m_state = &m_state1; }
m_state est un ancien état, qu'on ressuscite, mais donc, avec ses anciens membres.
Ce qui fait que l'état de ta machine est très largement complexifié, puisque l'état actuel est aussi dépendant de ton historique, et d'états non courant.
Honnêtement, je ne vois pas comment on peut faire un minimum de preuve de fonctionnement (ce qui est quand même l'intérêt d'une machine à états) là dessus.
Partager