设计模式—责任链模式(二十)

来源:互联网 发布:淘宝下架的宝贝在哪里找 编辑:程序博客网 时间:2024/06/14 11:00

        软件领域中的设计模式的重要性不言而喻。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态。虽然知道这些特性的定义但是并没有做到真正的理解,这样特性有什么作用?用于什么场合中等等问题,带着疑问开始学习设计模式,主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。

        责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理为止。

        责任链很好理解就是基类和不同子类组成的“链”式结构;



#include <iostream>#include <string>#include <vector>using namespace std;//请求class Request{public:string m_strContent;int m_nNumber;string requestType;};//管理者class Manager{protected:Manager* manager;string name;public:Manager(string temp){name = temp;}void SetSuccessor(Manager* temp){manager = temp;}virtual void GetRequest(Request* request) = 0;};//经理class CommonManager : public Manager{public:CommonManager(string strTemp) : Manager(strTemp){}virtual void GetRequest(Request* request){if (request->requestType=="请假" && request->m_nNumber<10){cout << name << "  请假" << request->m_nNumber << " 天" << endl;}else{manager->GetRequest(request);}}};//总监class MajorDomo : public Manager{public:MajorDomo(string name) : Manager(name){}virtual void GetRequest(Request* request){if (request->requestType == "请假" && request->m_nNumber >= 10){cout << name << "  请假" << request->m_nNumber << " 天" << endl;}}};//客户端int main(){Manager * common = new CommonManager("张经理");Manager * major = new MajorDomo("李总监");common->SetSuccessor(major);Request* req = new Request();req->requestType = "请假";req->m_nNumber = 33;common->GetRequest(req);req->m_nNumber = 3;common->GetRequest(req);return 0;}