博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式02-职责链模式
阅读量:6513 次
发布时间:2019-06-24

本文共 1743 字,大约阅读时间需要 5 分钟。

hot3.png

  1. 定义:

          职责链模式:使多个对象都用机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对象处理他为之。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该想主管的经理申请,如果加薪的数量在经理的职权内,那么经理可以直接批准,否则将申请上交给总监。总监的处理方式也一样,总经理可以处理所有的请求。这个就是典型的职责链模式,请求的处理形成了一条链,知直到有对象处理请求。给出这个例子的UML图:

103252_ZYZH_929521.png

 

#include 
#include
using namespace std; //抽象管理者class Manager{protected: Manager *m_manager; string m_name;public: Manager(Manager *manager, string name):m_manager(manager), m_name(name){} virtual void DealWithRequest(string employeeName, int num){}};//经理class CommonManager:public Manager{public: CommonManager(Manager * manager, string name):Manager(manager, name){} void DealWithRequest(string employeeName, int num) { if(num < 500)//在经理的职权范围内 { cout << "经理" << m_name <<"批准"<
<<"加薪"<
<<"元"<
<
DealWithRequest(employeeName,num); } }};//总监class Majordomo: public Manager { public: Majordomo(Manager *manager, string name):Manager(manager,name) {} void DealWithRequest(string name, int num) { if(num < 1000) //总监职权之内 { cout<<"总监"<
<<"批准"<
<<"加薪"<
<<"元"<
<
DealWithRequest(name, num); } } }; //总经理 class GeneralManager: public Manager { public: GeneralManager(Manager *manager, string name):Manager(manager,name) {} void DealWithRequest(string name, int num) //总经理可以处理所有请求 { cout<<"总经理"<
<<"批准"<
<<"加薪"<
<<"元"<
<
DealWithRequest("D",300); //员工D要求加薪 common->DealWithRequest("E", 600); common->DealWithRequest("F", 1000); delete common; delete majordomo; delete general; return 0; }

结果图:

经理C批准D加薪300元经理C无权处理,交由总监处理!总监B批准E加薪600元经理C无权处理,交由总监处理!总监B无法处理,交由总经理处理总经理A批准F加薪1000元

参考地址:http://blog.csdn.net/wuzhekai1985/article/details/6673892

转载于:https://my.oschina.net/u/929521/blog/821854

你可能感兴趣的文章
mysql_jdbc
查看>>
python之psutil模块
查看>>
Android数据保存之文件保存
查看>>
LeetCode 06 ZigZag Conversion
查看>>
nj11--http
查看>>
数字校园-云资源平台 2014.10.26-人人通共享空间
查看>>
使用IIS承载WCF服务
查看>>
Oracle function实现根据输入的日期以及天数,获取此日期之后的天数的工作日
查看>>
ubuntu14.04上搭建android开发环境
查看>>
ubuntu导入公钥的方法
查看>>
扒美女衣服——妄撮游戏实现原理
查看>>
TabLayout:另一种Tab的实现方式
查看>>
dubbo与zookeeper的关系
查看>>
合并小图片利器TexturePacker GUI
查看>>
Hadoop源码系列(一)FairScheduler申请和分配container的过程
查看>>
在 CentOS 和 RHEL 上安装 Puppet 服务器和客户端
查看>>
Android性能优化Google课程翻译一:Render----OverDraw实战
查看>>
TP3.2校验微信公众号||小程序 服务器地址
查看>>
用Camshift算法对指定目标进行跟踪
查看>>
Tiny4412 开发板 编译环境搭建【转】
查看>>