#include <iostream>
using namespace std;
class Handler
{
public:
virtual void HandleRequest() = 0;
void setNextHandler(Handler *nextHandler)
{
this->nextHandler=nextHandler;
}
protected:
Handler *nextHandler;
};
class ConcreteHanderA:public Handler
{
public:
virtual void HandleRequest()
{
cout<<"ConcreteHanderA HandleRequest "<<endl;
if(nextHandler != NULL)
{
nextHandler->HandleRequest();
}
}
};
class ConcreteHanderB:public Handler
{
public:
virtual void HandleRequest()
{
cout<<"ConcreteHanderB HandleRequest "<<endl;
if(nextHandler != NULL)
{
nextHandler->HandleRequest();
}
}
};
class ConcreteHanderC:public Handler
{
public:
virtual void HandleRequest()
{
cout<<"ConcreteHanderC HandleRequest "<<endl;
if(nextHandler != NULL)
{
nextHandler->HandleRequest();
}
}
};
int main()
{
Handler * handlerA = new ConcreteHanderA();
Handler * handlerB = new ConcreteHanderB();
Handler * handlerC = new ConcreteHanderC();
handlerA->setNextHandler(handlerC);
handlerC->setNextHandler(handlerB);
handlerA->HandleRequest();
return 0;
}