职责链模式

一、简介

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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

我是如何黑掉英国间谍软件公司Gamma的

前几天,有黑客《入侵了英国间谍软件公司Gamma》。本文翻译自黑客自己公布的入侵指南。详细的介绍了从信息收集,到发现目标站点,以及进行源码审计,绕过waf注入,...

50710
来自专栏FreeBuf

跨平台后门Mokes现已加入OS X豪华午餐

近期,卡巴斯基实验室的安全研究人员发现了一种恶意软件,这种恶意软件可以在目前主流的几款操作系统平台上运行,包括Windows、Linux和Mac OSX。 根据...

1879
来自专栏FreeBuf

钓鱼骗局:通过伪造App Store支付链接误导用户

网络犯罪目前又将目标指向苹果用户,他们通过更加成熟的钓鱼手法,引导用户点击一个支付退款链接,由此获取用户个人敏感数据。 钓鱼的前期-引导用户进入“陷阱” 这种新...

2178
来自专栏FreeBuf

利用蓝牙从FUZE获取信用卡数据测试

这篇文章主要讨论关于FUZE Card智能卡的安全问题,这是一种带有蓝牙功能的可编程信用卡,它的大小跟普通信用卡一样,但FUZE可以取代至少30张信用卡,也就是...

1313
来自专栏Seebug漏洞平台

Seebug漏洞平台2016年度报告

目录 一、概述 二、漏洞详情等信息以及漏洞验证程序(PoC)收录状况 2.1 漏洞验证程序(PoC)数量统计分析 2.2 收录漏洞的危害等级分布统计分析 2.3...

4063
来自专栏黑白安全

大量 Mega 帐户的登录信息遭泄露并暴露了用户文件

据外媒 ZDNet 报道,Mega —— 这家于新西兰成立并提供在线云存储和文件托管服务的公司,目前被发现其平台中有成千上万的帐号凭证信息已在网上被公开发布。

1041
来自专栏FreeBuf

JavaScript的注入引出技术诈骗

0×01 前言 在最近的恶意软件的调查中,我们发现了一些有趣的混淆JavaScript代码。此代码伪装成现在流行的插件AddThis social sharin...

2355
来自专栏安恒信息

[科普]保护WiFi无线网络安全

全球有超过四分之一的互联网用户在家使用WiFi上网,不过其中许多人并不清楚该如何保护家庭网络以及这样做的重要性。在这方面,最妥当的想法就是将您家中的WiFi网络...

2984
来自专栏java一日一条

如何给你的女神修Mac电脑

话不多说,直接进入正题,如果你或者你的女神使用 Mac 遇到以下这些问题的话,你可以来看看怎么解决。

1092
来自专栏CSDN技术头条

互联网从业者必须知道的36个安全技术术语

想要了解更多关于网络安全领域的信息?作者在本篇文章里面已经创建了一份需要知道的术语表,以帮助读者了解网络安全领域的相关内容。以下为译文。 软件开发中的安全主题常...

21610

扫码关注云+社区

领取腾讯云代金券