首页 > 代码库 > 职责链模式

职责链模式

一、简介

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 }

 

职责链模式