原网址:https://blog.csdn.net/CoderAldrich/article/details/83183733
#include <iostream>
using namespace std;
class Context;
class State {
public:
virtual void Handle(Context *context) = 0;
};
class ConcreteStateA : public State {
public:
virtual void Handle(Context *context) {
cout << "I'm concretestateA" << endl;
}
};
class ConcreteStateB : public State {
public:
virtual void Handle(Context *context) {
cout << "I'm concretestateB" << endl;
}
};
class Context {
public:
Context(State *state) : state_(state){}
void Request() {
if (state_) {
state_->Handle(this);
}
}
void ChangeState(State *state) {
state_ = state;
}
private:
State *state_;
};
int main() {
State *state_a = new ConcreteStateA();
State *state_b = new ConcreteStateB();
Context *context = new Context(state_a);
context->Request();
context->ChangeState(state_b);
context->Request();
delete context;
delete state_a;
delete state_b;
}
运行结果:
I’m concretestateA
I’m concretestateB