C++设计模式---职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止。
这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求,这样系统的更改可以在不影响客户端的情况下动态地重新组织和分配责任。
职责链模式结构图:
Handler类,定义一个处理请求的接口
class Handler
{
protected:
Handler *successor;
public:
void SetSuccessor(Handler *successor) //设置继任者
{
this->successor = successor;
}
void HandleRequest(int request)=0; //处理请求的抽象方法
};
ConcreteHandler类,具体处理者类,处理它所负者的请求,可访问它的后继者,如果可处理该请求,就处理之,否则就将该请求转发给它的后继者。
ConcreteHandler1,当请求数在0到10之间则有权处理,否则转到下一位
class ConcreteHandler1 : Handler
{
public:
void HandleRequest(int request)
{
if(request >= 0 && request<10)
{
cout<< “ConcreteHandler1”<<“处理请求:”<<request<<endl;
}
else if(successor != NULL)
{
successor->handleRequest(request);
}
}
};
ConcreteHandler2,当请求数在10到20之间则有权处理,否则转到下一位。
class ConcreteHandler2 : Handler
{
public:
void HandleRequest(int request)
{
if(request >= 10 && request<20)
{
cout<< “ConcreteHandler2”<<“处理请求:”<<request<<endl;
}
else if(successor != NULL)
{
successor->handleRequest(request);
}
}
};
ConcreteHandler3,当请求数在20到30之间则有权处理,否则转到下一位。
class ConcreteHandler3 : Handler
{
public:
void HandleRequest(int request)
{
if(request >= 20 && request<30)
{
cout<< “ConcreteHandler3”<<“处理请求:”<<request<<endl;
}
else if(successor != NULL)
{
successor->handleRequest(request);
}
}
};
客户端代码,向链上的具体处理者对象提交请求。
void main()
{
Handler *h1 = newConcreteHandler1();
Handler *h2 = newConcreteHandler2();
Handler *h3 = newConcreteHandler3();
h1->SetSuccessor(h2);
h2->SetSuccessor(h3);
int request[]={2,5,14,22,18,3,27,20};
for(int i=0;i<8;i++)
{
h1->HandleRequest(request[i]);
}
}
职责链的好处:
1. 当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。
2. 可以随时地增加或修改处理的请求的结构,增强了对象指派职责的灵活性
C++设计模式---职责链模式的更多相关文章
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
- C++设计模式——职责链模式
什么是职责链模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条 ...
- 设计模式:职责链模式(Chain of Responsibility)
去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...
- javascript设计模式——职责链模式
前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一 ...
- java设计模式---职责链模式
职责链的本质:分离职责,动态组合 样例: /** * 定义职责对象的接口 * */ public abstract class Handler { protected Handler successo ...
- 设计模式 | 职责链模式(Chain of responsibility)
定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 结构:(书中图,侵删) 一个抽象的处理者 若干 ...
随机推荐
- javascript基础学习(九)
javascript之基本包装类型 学习要点: 基本包装类型概述 Boolean类型 Number类型 String类型 一.基本包装类型概述 为了便于操作基本类型值,提供了3种特殊的引用类型:Boo ...
- 泛型? extents super
?可以接受任何泛型集合,但是不能编辑集合值.所以一般只在方法参数中用 例子: ? extends Number 则类型只能是Number类的子孙类 ? super String 则类型只能是Str ...
- visualSVN server库迁移(转)
转自:http://blog.csdn.net/yuhuijun_1/article/details/9762683 首先,VisualSVN Server Manager,包含两个路径,一个是安装路 ...
- 单选按钮 点击value值自动把单选按钮选中
HTML 代码 <tr> <td align="right">性别:</td> <td><inputt ...
- phpstorm IDE编辑器使用手记
a.选项卡限制问题 突破打开的文件选项卡个数限制:默认安装后的phpstorm打开的文件个数是有限制的,默认是10个.也就是最多同时打开10个文件进行编辑. 超过10个就会自动关闭前面最先打开的文件. ...
- 基于BitNami for XAMPP进行Drupal7安装的教程(Win7平台)
BitNami是一个开源项目,该项目产生的开源软件包可用于安装Web应用程序和解决方案堆栈,以及虚拟设备.BitNami 提供wordpress.joomla.drupal.bbpress等开源程序的 ...
- phpcms v9 get调用标签整理
常见的phpcms标签调用 1.调用本系统单条数据(调用ID为1的信息,标题长度不超过25个汉字,显示更新日期): "select * from phpcms_content where ...
- 安卓AVD使用建议
问题描述:之前在安装了Android开发环境后,一开始并没有直接在Android手机和平板上进行调试,是使用的AVD模拟器工具.由于电脑的配置不是特别好,总感觉AVD的使用速度太慢,包括启动的时候还有 ...
- [R] /usr/share/doc/apache2/README.Debian.gz
Contents======== Apache2 Configuration under Debian GNU/Linux Files and Directories in '/etc/apache2 ...
- 为什么Android AsyncTask的使用要遵循五大原则
引言 AsyncTask是一个围绕Handler和Thread而设计的助手类,封装了在工作线程中与UI交互的细节,只需要对应重写几个回调方法即可,并使得代码更加简洁,优雅.但要注意的是AsyncTas ...