//
// Created by win10 on 2021/11/16.
//
#include <iostream>
#include <vector>
using namespace std;
/*
* 责任链模式
*/
class Request {
public:
string m_content;
int m_number;
};
class Manager {
public:
Manager(string temp) {
this->name = temp;
}
void setSuccessor(Manager* temp) {
this->manager = temp;
}
virtual void getRequest(Request* request) = 0;
protected:
Manager* manager;
string name;
};
class CommonManager: public Manager {
public:
CommonManager(string str): Manager(str) {}
virtual void getRequest(Request* request) {
if (request->m_number >= 0 && request->m_number < 10) {
std::cout << this->name << "deal " << request->m_number << std::endl;
} else {
manager->getRequest(request);
}
}
};
class MajorDemo: public Manager {
public:
MajorDemo(string str): Manager(str) {}
virtual void getRequest(Request* request) {
if (request->m_number >= 10) {
std::cout << this->name << "deal " << request->m_number << std::endl;
}
}
};
int main() {
Manager* common = new CommonManager("manager zhang");
Manager* major = new MajorDemo("manager zhang");
common->setSuccessor(major);
Request* request = new Request();
request->m_number = 33;
common->getRequest(request);
request->m_number = 3;
common->getRequest(request);
return 0;
}