码迷,mamicode.com
首页 > 其他好文 > 详细

职责链模式

时间:2015-01-28 22:36:02      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

一、简介

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!