#include <iostream>using namespace std;class Context;class State {public:virtual void Handle(Context* c) = 0;};class Context {private:State* m_state;public:Context(State* p):m_state(p) {}void Request() {if (m_state != NULL) {m_state->Handle(this);}}void changeState(State* s) {if (m_state != NULL) {delete m_state;m_state = NULL;}m_state = s;}};class ConcretStateA: public State {public:void Handle(Context* c);};class ConcretStateB: public State {public:void Handle(Context* c);};void ConcretStateA::Handle(Context* c) {cout << "Handle by ConcretStateA" << endl;if (c != NULL) {c->changeState(new ConcretStateB());}}void ConcretStateB::Handle(Context* c) {cout << "Handle by ConcretStateB" << endl;if (c != NULL) {c->changeState(new ConcretStateA());}}int main(int argc, char** argv) {Context* c = new Context(new ConcretStateA());c->Request();c->Request();c->Request();c->Request();c->Request();c->Request();}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。