#include <iostream>
using namespace std;
class Context;
class State
{
public:
virtual void handleState(Context* pobjContext) = 0;
};
class Context
{
public:
Context() {}
Context(State* pobjState) : m_pobjState(pobjState) {}
void getState()
{
m_pobjState->handleState(this);
}
void setNextState(State* pobjState)
{
m_pobjState = pobjState;
}
private:
State* m_pobjState;
};
class ConcreteStateB;
class ConcreteStateA : public State
{
public:
ConcreteStateA() {}
virtual void handleState(Context* pobjContext) override
{
if (pobjContext)
{
cout << "state one" << endl;
}
}
};
class ConcreteStateB : public State
{
public:
ConcreteStateB() {}
virtual void handleState(Context* pobjContext) override
{
if (pobjContext)
{
cout << "state two" << endl;
pobjContext->setNextState(new ConcreteStateA());
}
}
};
int main()
{
Context* pobjContext = new Context(new ConcreteStateB());
pobjContext->getState();
pobjContext->getState();
return 0;
}
总结:状态模式把一些与特定状态相关的行为局部化,减少类之间的耦合
状态模式
最新推荐文章于 2024-04-26 00:03:02 发布