基本概念
具体案例
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <crtdbg.h>
#include<unordered_map>
using namespace std;
class Handler
{
public:
Handler();
~Handler();
// 设置继任者
void setSuccessor(Handler* successor) {
this->successor = successor;
}
// 处理请求的抽象方法
virtual void HandleRequest(int request) = 0;
private:
protected:
Handler* successor;
};
class ConcreterHandler1 :public Handler
{
public:
ConcreterHandler1();
~ConcreterHandler1();
void HandleRequest(int request) {
// 0 - 10 处理此请求
if (request >= 0 && request < 10) {
cout << "请求处理:" << typeid(this).name() << request << endl;
}
// 转移到下一位
else if (successor != nullptr) {
successor->HandleRequest(request);
}
}
private:
};
class ConcreteHandler2 :public Handler
{
public:
ConcreteHandler2();
~ConcreteHandler2();
void HandleRequest(int request) {
if (request >= 10 && request < 20) {
cout << "请求处理:" << typeid(this).name() << request << endl;
}
else if (successor != nullptr) {
successor->HandleRequest(request);
}
}
private:
};
class ConcreteHandler3 :public Handler
{
public:
ConcreteHandler3();
~ConcreteHandler3();
void HandleRequest(int request) {
if (request >= 20 && request < 30) {
cout << "请求处理:" << typeid(this).name() << request << endl;
}
else if (successor != nullptr) {
successor->HandleRequest(request);
}
}
private:
};
ConcreteHandler3::ConcreteHandler3()
{
}
ConcreteHandler3::~ConcreteHandler3()
{
}
ConcreteHandler2::ConcreteHandler2()
{
}
ConcreteHandler2::~ConcreteHandler2()
{
}
ConcreterHandler1::ConcreterHandler1()
{
}
ConcreterHandler1::~ConcreterHandler1()
{
}
Handler::Handler()
{
}
Handler::~Handler()
{
}
int main(int argc, char** argv)
{
Handler* myhandle1 = new ConcreterHandler1();
Handler* myhandle2 = new ConcreteHandler2();
Handler* myhandle3 = new ConcreteHandler3();
// 设置职责链上家与下家
myhandle1->setSuccessor(myhandle2);
myhandle2->setSuccessor(myhandle3);
int request[8] = { 2,5,14,22,18,3,27,20 };
for (auto i : request) {
myhandle1->HandleRequest(i);
}
return 0;
}