#pragma once
#ifndef CHAINOFRESPONSIBILITY_H
#define CHAINOFRESPONSIBILITY_H
#include <stdio.h>
class Handler
{
public:
Handler(Handler *pSuccessor = NULL);
virtual ~Handler();
virtual void HandleRequest() = 0;
protected:
Handler* m_pNextHandler;
};
class ConcreateHandler1 : public Handler
{
public:
ConcreateHandler1(Handler *pNextHandler = NULL)
: Handler(pNextHandler){}
virtual ~ConcreateHandler1(){}
virtual void HandleRequest();
};
class ConcreateHandler2 : public Handler
{
public:
ConcreateHandler2(Handler *pNextHandler = NULL)
: Handler(pNextHandler){}
virtual ~ConcreateHandler2(){}
virtual void HandleRequest();
};
#endif
#include "StdAfx.h"
#include "chainofresponsibility_impl.h"
#include <iostream>
Handler::Handler(Handler *pNextHandler )
: m_pNextHandler(pNextHandler)
{
}
Handler::~Handler()
{
delete m_pNextHandler;
m_pNextHandler = NULL;
}
void ConcreateHandler1::HandleRequest()
{
if (m_pNextHandler)
{
std::cout <<"HandleRequest not by ConcreateHandler1,Transfer Next\n";
m_pNextHandler->HandleRequest();
}
else
{
std::cout << "HandleRequest by ConcreateHandler1\n";
}
}
void ConcreateHandler2::HandleRequest()
{
if (m_pNextHandler)
{
std::cout <<"HandleRequest not by ConcreateHandler2,Transfer Next\n";
m_pNextHandler->HandleRequest();
}
else
{
std::cout << "HandleRequest by ConcreateHandler2\n";
}
}
#include "stdafx.h"
#include "chainofresponsibility_impl.h"
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
Handler *p1 = new ConcreateHandler1();
Handler *p2 = new ConcreateHandler2(p1);
p2->HandleRequest();
delete p2;
system("pause");
return 0;
}