前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >职责链模式

职责链模式

作者头像
用户1215536
发布2018-02-05 11:32:24
3810
发布2018-02-05 11:32:24
举报

一、简介

1、当客户提交一个请求时,请求沿着链传递直到有一个管理者对象处理它。

2、UML

3、所属类别:行为型

二、程序

代码语言:javascript
复制
  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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-01-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档