一、简介
1、当客户提交一个请求时,请求沿着链传递直到有一个管理者对象处理它。
2、UML
3、所属类别:行为型
二、程序
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 }