我认为实现状态机的好方法是使用单例模式。例如,可以像这样:
class A
{
private:
friend class State;
State* _state;
void change_state(State* state) { _state = state; }
};
class State
{
virtual void action(A *a) = 0;
private:
void change_state(A *a, State *state) { a->change_state(state); }
};
class StateA : public State
{
public:
static State* get_instance()
{
static State *state = new StateA;
return state;
}
virtual void action(A *a) { change_state(a, StateB::get_instance(); }
};
class StateB : public State
{
public:
...
virtual void action(A *a) { change_state(a, StateA::get_instance(); }
};
我的问题是:我已经读了很多有关单例模式非常糟糕的文章。如果不使用单例模式实现状态机模式,每次更改状态都必须调用new,那么对于那些不喜欢单例模式的人来说,你会如何实现状态机模式?