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

#include <iostream>
#include <string> 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 name, int num) {}
}; //经理
class CommonManager : public Manager
{
public:
CommonManager(Manager* manager,string name):Manager(manager,name){}
void DealWithRequest(string name,int num)
{
if(num < )
{
cout << "经理" <<m_name << "批准" << name << "加薪" << num << "元" <<endl;
}
else
{
cout << "经理" << m_name << "无法处理,交由总监处理" <<endl;
m_manager->DealWithRequest(name,num);
}
}
}; class Majordomo:public Manager
{
public:
Majordomo(Manager *manager,string name):Manager(manager,name){}
virtual void DealWithRequest(string name,int num)
{
if(num < )
{
cout << "总监" <<m_name << "批准" << name << "加薪" << num << "元" <<endl;
}
else
{
cout << "总监" << m_name << "无法处理,交由总经理处理" <<endl;
m_manager->DealWithRequest(name,num);
}
}
}; class GeneralManager : public Manager
{
public:
GeneralManager(Manager *manager,string name):Manager(manager,name){}
void DealWithRequest(string name,int num)
{
cout << "总经理" <<m_name << "批准" << name << "加薪" << num << "元" <<endl;
}
};
客户端使用:
#include <iostream>
#include "state.h" using namespace std; int main()
{
Manager *general = new GeneralManager(NULL,"a");
Manager *majordomo = new Majordomo(general,"b");
Manager *common = new CommonManager(majordomo,"c");
common->DealWithRequest("d",);
common->DealWithRequest("d",);
common->DealWithRequest("d",);
system("pause");
return ;
}
说明:
1. 职责链的特点是:当客户提交一个请求时,请求是沿链传递直至有一个Manager对象负责处理它。
2. 职责链的好处是:请求者不用管哪个对象来处理,反正该请求会被处理。它只需保持一个后继者即可。
3. 要注意的是:一个请求到链的最后可能也没有处理,所以一定要配置得当。
c++ 职责链模式(Chain of Responsibility)的更多相关文章
- atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换
atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...
- 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...
- 职责链模式(Chain of Responsibility)(对象行为型)
1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象).至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与 ...
- 责任链模式 职责链模式 Chain of Responsibility Pattern 行为型 设计模式(十七)
责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这 ...
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...
- 设计模式之职责链模式(Chain of Responsibility)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 行为型设计模式之职责链模式(Chain of Responsibility)
结构 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 适用性 有多个的对象可以处理一个请求,哪个 ...
- 职责链模式(chain of responsibility)
一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ...
- 职责链模式(chain of responsibility Pattern)
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. •Handler: 抽象处理者:定义出一个 ...
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...
随机推荐
- openVPN报错:All TAP-Windows adapters on this system are currently in use
解决办法: 1. 确定openVPN服务已打开. 2. 控制面板\网络和 Internet\网络连接,确定TAP-Windows Adapter V9已经启动.
- [游戏学习27] MFC 匀速运动
>_<:理解上一个时间函数的概念和用法,本节的实现也比较简单 >_<:就是简单的绘图+时间函数 >_<:TicTac.h #define EX 1 //该点左鼠标 ...
- 上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策
上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策上海达策为电子行业企业提供了多样的ERP信息化管理系统.基于多营运中心的管理架构体系,构造了以供应链.生产管理.财务一体化为核心,协同HR.B ...
- iscroll初体验
引入 iscroll是什么?多的概念性让人看不懂的东西就不说了因为看了也可能看不明白,iscroll主要用于移动端设备,主要包括以下的应用场合: 缩放 拉动刷新 速度和性能提升 精确捕捉元素 自定义滚 ...
- 19数据表的创建-普通表&临时表-天轰穿大话数据库视频教程
关键字:数据表 数据库性能 临时表 天轰穿 sqlserver 数据库大纲:数据表的特点,数据表的类型及用法,SQL创建数据表,创建临时表,全局临时表 优酷超清地址 腾讯超清地址 原文地址:http: ...
- phpweb成品网站最新版(注入、上传、写shell)
注入:之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码 鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件鸡肋2: 有一定安全常识的站长都会删掉 install 目 ...
- linux云主机怎么安装WDCP
linux云主机 教你成功安装WDCP的2个方法(第一个不成功就试第2个) 工具/原料 Xshell 云服务器 方法/步骤 1 先用Xshell连接你的服务器 2 输入一下代码 wget ...
- spring scope="prototype", scope="session"
转自: http://www.cnblogs.com/JemBai/archive/2010/11/10/1873954.html struts+spring action应配置为scope=&quo ...
- YChaos生成混沌图像
YChaos是一款通过数学公式生成混沌图像的软件,展示混沌之美,数学之美.软件中定义一套简易的脚本语言,用于描述数学表达式.使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形与图 ...
- 一个非常棒的html5框架-ionic
http://ionicframework.com/ 之前用过app.js,相比ionic,真是弱爆了! http://learn.ionicframework.com/formulas/ 上面的链接 ...