#include <iostream>
using namespace std;
class context;
class Istate
{
public:
void virtual dosomething(context *pHandle) = 0;
};
class stateStart: public Istate
{
public:
void dosomething(context *pHandle);
};
class stateStop: public Istate
{
public:
void dosomething(context *pHandle);
};
class context
{
public:
context(Istate *p)
{
pstate = p;
}
~context()
{
if (pstate != NULL)
{
delete pstate;
pstate = NULL;
}
}
void setState(Istate *p)
{
delete[] pstate;
pstate = NULL;
pstate = p;
}
Istate* getState()
{
return pstate;
}
void request()
{
pstate->dosomething(this);
}
private:
Istate *pstate;
};
void stateStart::dosomething(context *pHandle)
{
cout<<"start play"<<endl;
Istate *p = new stateStop();
pHandle->setState(p);
}
void stateStop::dosomething(context *pHandle)
{
cout<<"stop play"<<endl;
Istate *p = new stateStart();
pHandle->setState(p);
}
int main()
{
stateStart *psstart = new stateStart();
context *pmyContext = new context(psstart);
pmyContext->request();
pmyContext->request();
delete pmyContext;
return 0;
}
using namespace std;
class context;
class Istate
{
public:
void virtual dosomething(context *pHandle) = 0;
};
class stateStart: public Istate
{
public:
void dosomething(context *pHandle);
};
class stateStop: public Istate
{
public:
void dosomething(context *pHandle);
};
class context
{
public:
context(Istate *p)
{
pstate = p;
}
~context()
{
if (pstate != NULL)
{
delete pstate;
pstate = NULL;
}
}
void setState(Istate *p)
{
delete[] pstate;
pstate = NULL;
pstate = p;
}
Istate* getState()
{
return pstate;
}
void request()
{
pstate->dosomething(this);
}
private:
Istate *pstate;
};
void stateStart::dosomething(context *pHandle)
{
cout<<"start play"<<endl;
Istate *p = new stateStop();
pHandle->setState(p);
}
void stateStop::dosomething(context *pHandle)
{
cout<<"stop play"<<endl;
Istate *p = new stateStart();
pHandle->setState(p);
}
int main()
{
stateStart *psstart = new stateStart();
context *pmyContext = new context(psstart);
pmyContext->request();
pmyContext->request();
delete pmyContext;
return 0;
}