责任链模式将处理请求的对象连接成一条链,请求沿链逐级传递,直到某个对象处理该请求为止。

示例代码

#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);
                
                }