状态模式
类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的 MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电 影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。(来自单身狗的猜想)
#include <iostream>
using namespace std;
class Context;
class State
{
public:
virtual void Operation(Context *pContext) = 0;
};
class Context
{
private:
State * m_state;
public:
Context(State * p)
{
m_state = p;
}
~Context()
{
if (nullptr != m_state)
delete m_state;
}
void SomeOperation()
{
m_state->Operation(this);
}
void setState(State * p)
{
delete m_state;
m_state = p;
}
};
class ConcreteStateA : public State
{
public:
void Operation(Context * pContext);
};
class ConcreteStateB : public State
{
void Operation(Context * pContext)
{
std::cout << "OperationB" << std::endl;
// 这里有一个要更换状态,主要看实际需求
pContext->setState(new ConcreteStateA());
}
};
void ConcreteStateA::Operation(Context * pContext)
{
std::cout << "OperationA" << std::endl;
// 这里有一个要更换状态,主要看实际需求
pContext->setState(new ConcreteStateB());
}
int main()
{
using namespace std;
// 状态模式
Context *p = new Context(new ConcreteStateA());
p->SomeOperation();
p->SomeOperation();
delete p;
return 0;
}