责任链模式-C++实现

来源:互联网 发布:access数据库的扩展名 编辑:程序博客网 时间:2024/05/29 10:46
// ChainOfResponsibilityPattern.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>using namespace std;//requestclass Request{public:int m_nNumber;};//managerclass Manager{protected:string m_strName;Manager* manager;public:Manager(string temp) { m_strName = temp; }void SetSuccessor(Manager* temp) { manager = temp; }virtual void GetRequest(Request* request) = 0;};//经理class CommonManager : public Manager{public:CommonManager(string temp) :Manager(temp) {}virtual void GetRequest(Request *request);};void CommonManager::GetRequest(Request *request){if (request->m_nNumber >= 0 && request->m_nNumber < 1000){cout << m_strName << " deal " << request->m_nNumber << endl;}else{manager->GetRequest(request);}}//总监class Majordomo : public Manager{public:Majordomo(string temp) :Manager(temp) {}virtual void GetRequest(Request *request){if (request->m_nNumber <= 5000){cout << m_strName << " deal " << request->m_nNumber << endl;}else{manager->GetRequest(request);}}};//总经理class GeneralManager : public Manager{public:GeneralManager(string temp) :Manager(temp) {}virtual void GetRequest(Request *request){cout << m_strName << " deal " << request->m_nNumber << endl;}};int main(){Manager *common = new CommonManager("张经理");Manager *major = new Majordomo("李总监");GeneralManager *general = new GeneralManager("赵总");common->SetSuccessor(major);major->SetSuccessor(general);Request *rq = new Request();rq->m_nNumber = 999;common->GetRequest(rq);rq->m_nNumber = 4999;common->GetRequest(rq);rq->m_nNumber = 6000;common->GetRequest(rq);delete rq;delete major;delete common;delete general;    return 0;}

1 0