0
点赞
收藏
分享

微信扫一扫

设计模式-行为-职责链

栖桐 2022-06-09 阅读 37
#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;
}


举报

相关推荐

0 条评论