设计模式-行为-Chain of Responsibility(责任链)模式

梦想游戏人
目录:
软件架构

责任链把处理请求的对象 连接为一个链,逐级传递,直到有对象处理该请求。

  • #include "PublicHeaders.h"
  • #pragma once
  • class Request
  • {
  • public:
  • virtual int GetType()
  • {
  • return this->_type;
  • }
  • Request(int t)
  • {
  • this->_type = t;
  • }
  • private:
  • int _type;
  • };
  • class Handler
  • {
  • public:
  • virtual void HandleRequest(Request*request) = 0;
  • void setSuccessor(Handler *s)
  • {
  • this->successor = s;
  • }
  • protected:
  • Handler *successor = nullptr;
  • };
  • class HandlerA :public Handler
  • {
  • public:
  • virtual void HandleRequest(Request*request)override
  • {
  • if (request->GetType() == 0)
  • {
  • cout << "do request success in " << __FUNCTION__ << endl;
  • return;
  • }
  • if (successor)
  • {
  • successor->HandleRequest(request);
  • }
  • }
  • };
  • class HandlerB :public Handler
  • {
  • public:
  • public:
  • virtual void HandleRequest(Request*request)override
  • {
  • if (request->GetType() == 1)
  • {
  • cout << "do request success in " << __FUNCTION__ << endl;
  • return;
  • }
  • if (successor)
  • {
  • successor->HandleRequest(request);
  • }
  • }
  • };
  • void testChain()
  • {
  • Handler *ha = new HandlerA;
  • Handler*hb = new HandlerB;
  • ha->setSuccessor(hb);
  • Request *re = new Request(0);
  • ha->HandleRequest(re);
  • }
#include "PublicHeaders.h"
#pragma once


class Request
{
public:

	virtual int GetType()
	{
		return this->_type;
	}


	Request(int t)
	{
		this->_type = t;
	}
private:
	int _type;

};

class Handler
{
public:
	virtual void HandleRequest(Request*request) = 0;
	void setSuccessor(Handler *s)
	{
		this->successor = s;
	}

protected:
	Handler *successor = nullptr;
 
};



class HandlerA :public Handler
{
public:

	virtual void HandleRequest(Request*request)override
	{
		if (request->GetType() == 0)
		{
			cout << "do request success in " << __FUNCTION__ << endl;
			return;
		}
		if (successor)
		{
			successor->HandleRequest(request);
		}

	}
};

class HandlerB :public Handler
{
public:
public:

	virtual void HandleRequest(Request*request)override
	{
		if (request->GetType() == 1)
		{
			cout << "do request success in " << __FUNCTION__ << endl;
			return;
		}
		if (successor)
		{
			successor->HandleRequest(request);
		}

	}
};




void testChain()
{

	Handler *ha = new HandlerA;
	Handler*hb = new HandlerB;
	ha->setSuccessor(hb);

	Request *re = new Request(0);

	ha->HandleRequest(re);

}
Scroll Up