#ifndef HANDLER_H#define HANDLER_H#include <windows.h>class Handler{ public: /** Default constructor */ Handler(Handler* pHandler); /** Default destructor */ virtual ~Handler(); virtual void HandleRequest()=0; BOOL HaveSuccessor(){return NULL!=m_pSuccessor;} protected: private: Handler* m_pSuccessor;};#endif // HANDLER_H
#include "Handler.h"#include <windows.h>Handler::Handler(Handler* pHandler):m_pSuccessor(NULL){ m_pSuccessor=pHandler;}Handler::~Handler(){ //dtor}void Handler::HandleRequest(){ if (NULL!=m_pSuccessor) { m_pSuccessor->HandleRequest(); }}
#ifndef CONCRETEHANDLERA_H#define CONCRETEHANDLERA_H#include "Handler.h"class ConcreteHandlerA : public Handler{ public: /** Default constructor */ ConcreteHandlerA(Handler* pHandler); /** Default destructor */ virtual ~ConcreteHandlerA(); void HandleRequest(); protected: private:};#endif // CONCRETEHANDLERA_H
#include "ConcreteHandlerA.h"#include <iostream>using namespace std;ConcreteHandlerA::ConcreteHandlerA(Handler* pHandler):Handler(pHandler){ //ctor}ConcreteHandlerA::~ConcreteHandlerA(){ //dtor}void ConcreteHandlerA::HandleRequest(){ if (HaveSuccessor()) { Handler::HandleRequest(); } else cout<<"ConcreteHandlerA Handled Request"<<endl;}
#ifndef CONCRETEHANDLERB_H#define CONCRETEHANDLERB_H#include "Handler.h"class ConcreteHandlerB : public Handler{ public: /** Default constructor */ ConcreteHandlerB(Handler* pHandler); /** Default destructor */ virtual ~ConcreteHandlerB(); void HandleRequest(); protected: private:};#endif // CONCRETEHANDLERB_H
#include "ConcreteHandlerB.h"#include <iostream>using namespace std;ConcreteHandlerB::ConcreteHandlerB(Handler* pHandler):Handler(pHandler){ //ctor}ConcreteHandlerB::~ConcreteHandlerB(){ //dtor}void ConcreteHandlerB::HandleRequest(){ if (HaveSuccessor()) { Handler::HandleRequest(); } else cout<<"ConcreteHandlerB Handled Request"<<endl;}
#include <iostream>#include "Handler.h"#include "ConcreteHandlerA.h"#include "ConcreteHandlerB.h"using namespace std;int main(){ Handler* pHandlerA=new ConcreteHandlerA(NULL); Handler* pHandlerB=new ConcreteHandlerB(pHandlerA); pHandlerB->HandleRequest(); delete pHandlerB; delete pHandlerA; return 0;}