大话设计模式责任链模式c++实现

责任链模式

其他二十三种设计模式

#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 request4,request3,request2,request1;   一步
	delete zongjinli;
	delete zongjian;
	delete jinli;
}

int main() {
    
    
	test1();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wode_0828/article/details/114163680