责任链模式
其他二十三种设计模式
#include<iostream>
using namespace std;
class Request {
public:
void RequestType(string _requestType) {
this->requestType = _requestType;
}
string GetRequestType() {
return this->requestType;
}
void RequestContent(string _requestContent) {
this->requestContent = _requestContent;
}
string GetRequetContent() {
return this->requestContent;
}
void Number(int _number) {
this->number = _number;
}
int GetNumber() {
return this->number;
}
private:
string requestType = "";
string requestContent = "";
int number = 0;
};
class Manager {
public:
Manager(string _name) {
this->name = _name;
}
void SetSuperior(Manager* _superior) {
this->superior = _superior;
}
virtual void RequestApplications(Request* _request) = 0;
protected:
string name;
Manager* superior;
};
class CommonManager :public Manager {
public:
CommonManager(string _name):Manager(_name){
}
virtual void RequestApplications(Request* _request) {
if (_request->GetRequestType() == "请假" && _request->GetNumber() <= 2) {
cout << name << ": " << _request->GetRequetContent() << " 数量 "
<< _request->GetNumber() << " 被批准" << endl;
}
else {
if (superior != NULL) {
superior->RequestApplications(_request);
}
}
}
};
class Majordomo :public Manager {
public:
Majordomo(string _name) :Manager(_name) {
}
virtual void RequestApplications(Request* _request) {
if (_request->GetRequestType() == "请假" && _request->GetNumber() <= 5) {
cout << name << ": " << _request->GetRequetContent() << " 数量 "
<< _request->GetNumber() << " 被批准" << endl;
}
else {
if (superior != NULL) {
superior->RequestApplications(_request);
}
}
}
};
class GeneralManager :public Manager {
public:
GeneralManager(string _name) :Manager(_name) {
}
virtual void RequestApplications(Request* _request) {
if (_request->GetRequestType() == "请假") {
cout << name << ": " << _request->GetRequetContent() << " 数量 "
<< _request->GetNumber() << " 被批准" << endl;
}
else if(_request->GetRequestType()=="加薪"&&_request->GetNumber()<=500){
cout << name << ": " << _request->GetRequetContent() << " 数量 "
<< _request->GetNumber() << " 被批准" << endl;
}
else if (_request->GetRequestType() == "加薪" && _request->GetNumber() > 500) {
cout << name << ": " << _request->GetRequetContent() << " 数量 "
<< _request->GetNumber() << " 再说吧" << endl;
}
}
};
void test1() {
CommonManager* jinli = new CommonManager("经理");
Majordomo* zongjian = new Majordomo("总监");
GeneralManager* zongjinli = new GeneralManager("总经理");
jinli->SetSuperior(zongjian);
zongjian->SetSuperior(zongjinli);
Request* request1 = new Request();
request1->RequestType("请假");
request1->RequestContent("小菜请假");
request1->Number(1);
jinli->RequestApplications(request1);
Request* request2 = new Request();
request2->RequestType("请假");
request2->RequestContent("小菜请假");
request2->Number(4);
jinli->RequestApplications(request2);
Request* request3 = new Request();
request3->RequestType("加薪");
request3->RequestContent("小菜请求加薪");
request3->Number(500);
jinli->RequestApplications(request3);
Request* request4 = new Request();
request4->RequestType("加薪");
request4->RequestContent("小菜请求加薪");
request4->Number(1500);
jinli->RequestApplications(request4);
delete request4;
delete request3;
delete request2;
delete request1;
delete zongjinli;
delete zongjian;
delete jinli;
}
int main() {
test1();
return 0;
}