设计模式-行为-状态

来源:互联网 发布:图片提取文字软件 编辑:程序博客网 时间:2024/06/05 19:34
#pragma once#ifndef STATE_H #define STATE_H 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); }; #endif 

#include "StdAfx.h"#include "state_impl.h"#include <iostream> 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 <<this<<" Handle by ConcreateStateA\n"; if (NULL != pContext) { pContext->ChangeState(new ConcreateStateB()); } } void ConcreateStateB::Handle(Context* pContext) { std::cout <<this<<" Handle by ConcreateStateB\n"; if (NULL != pContext) { pContext->ChangeState(new ConcreateStateA()); } } 

// State.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "state_impl.h"#include <stdlib.h>//允许一个对象在其内部状态改变时改变它的行为int _tmain(int argc, _TCHAR* argv[]){Context *pContext = new Context(new ConcreateStateA); pContext->Request(); pContext->Request(); pContext->Request(); delete pContext; system("pause");return 0;}