标签:
一、简介
1、当客户提交一个请求时,请求沿着链传递直到有一个管理者对象处理它。
二、程序
1 // 职责链模式.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 #include<string> 7 using namespace std; 8 class Request 9 { 10 public: 11 string requesttype; 12 Request(string s) 13 { 14 requesttype=s; 15 } 16 ~Request(){} 17 }; 18 //管理者抽象类 19 class Manager 20 { 21 public: 22 Manager* super_manager;//本级管理者的上一级管理者 23 Manager(){} 24 virtual ~Manager(){} 25 virtual void requestapplication(Request *)=0; 26 }; 27 //具体的管理者 28 class Xiangmujingli :public Manager 29 { 30 public: 31 Xiangmujingli(){} 32 virtual ~Xiangmujingli(){} 33 virtual void requestapplication(Request *r) 34 { 35 cout<<"我是项目经理,"; 36 if(r->requesttype=="请假") 37 { 38 cout<<"你的请求,我准了"<<endl; 39 } 40 else 41 { 42 cout<<"你的请求我无权管理"<<endl; 43 super_manager->requestapplication(r); 44 } 45 } 46 }; 47 //具体的管理者 48 class Zongjingli :public Manager 49 { 50 public: 51 Zongjingli(){} 52 virtual ~Zongjingli(){} 53 virtual void requestapplication(Request *r) 54 { 55 cout<<"我是总经理,"; 56 if(r->requesttype=="加薪") 57 { 58 cout<<"你的请求,我准了"<<endl; 59 } 60 else 61 { 62 cout<<"你的请求我无权管理"<<endl; 63 super_manager->requestapplication(r); 64 } 65 } 66 }; 67 //具体的管理者 68 class CEO :public Manager 69 { 70 public: 71 CEO(){} 72 virtual ~CEO(){} 73 virtual void requestapplication(Request *r) 74 { 75 cout<<"我是CEO,"; 76 if(r->requesttype=="入股") 77 { 78 cout<<"你的请求,我准了"<<endl; 79 } 80 else 81 { 82 cout<<"你的请求我无权管理"<<endl; 83 super_manager->requestapplication(r); 84 } 85 } 86 }; 87 88 int _tmain(int argc, _TCHAR* argv[]) 89 { 90 Request *request=new Request("加薪"); 91 //实例化所有管理者 92 Xiangmujingli* xiangmujingli=new Xiangmujingli(); 93 Zongjingli *zongjingli=new Zongjingli(); 94 CEO * ceo=new CEO(); 95 //设置上下级关系 96 xiangmujingli->super_manager=zongjingli; 97 zongjingli->super_manager=ceo; 98 //寻找最下级的管理者 99 xiangmujingli->requestapplication(request); 100 return 0; 101 }
标签:
原文地址:http://www.cnblogs.com/bewolf/p/4257281.html