#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; //if pNextHandler is null,handler it itself
};
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 /* = NULL*/)
: 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";
}
}
// ChainOfResponsibility.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "chainofresponsibility_impl.h"
#include <stdlib.h>
//使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.
//将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.
int _tmain(int argc, _TCHAR* argv[])
{
// p2::handlerequest-->p1::handlerequest
Handler *p1 = new ConcreateHandler1(/*pNextHandler*/);
Handler *p2 = new ConcreateHandler2(p1);
p2->HandleRequest();
delete p2;
system("pause");
return 0;
}