State (C++实现)

// State.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;

 

class State;


class Context
{
public:
 Context(State* pState);
 ~Context();
 void Request();
 void ChangeState(State *pState);

private:
 State *m_pState;

};

 

class State
{
public:
 virtual ~State(){}

 virtual void Handle(Context* pContext) = 0;
};

class ConcreateStateA: public State
{
public:
 void Handle(Context* pContext);
};

class ConcreateStateB: public State
{
public:
 void Handle(Context* pContext);
};


Context::Context(State* pState): m_pState(pState)
{

}

Context::~Context()
{
 delete m_pState;
 m_pState = NULL;
}

void Context::Request()
{
 if (NULL != m_pState)
 {
  m_pState->Handle(this);
 }
}

void Context::ChangeState(State *pState)
{
 if (NULL != m_pState)
 {
  delete m_pState;
  m_pState = NULL;
 }
 m_pState = pState;
}

void ConcreateStateA::Handle(Context* pContext)
{
 std::cout << "Handle by ConcreateStateA/n";
}

void ConcreateStateB::Handle(Context* pContext)
{
 std::cout << "Handle by ConcreateStateB/n";
}

int _tmain(int argc, _TCHAR* argv[])
{

 State *pStateA = new ConcreateStateA();
 State *pStateB = new ConcreateStateB();
 Context *pContext = new Context(pStateA);
 pContext->Request();
 cout<<"-------------------------------"<<endl;
 pContext->ChangeState(pStateB);
 pContext->Request();

 delete pContext;

 return 0;
}

 

posted on 2011-06-01 14:53  IT@民工  阅读(184)  评论(0编辑  收藏  举报

导航