职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止。

这里发出这个请求的客户端并不知道这当中的哪一个对象最终处理这个请求,这样系统的更改可以在不影响客户端的情况下动态地重新组织和分配责任。

职责链模式结构图:

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++设计模式---职责链模式的更多相关文章

  1. 17. 星际争霸之php设计模式--职责链模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. JAVA 设计模式 职责链模式

    用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...

  3. 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)

    模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...

  4. C++设计模式——职责链模式

    什么是职责链模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条 ...

  5. 设计模式:职责链模式(Chain of Responsibility)

    去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...

  6. C#设计模式——职责链模式(Chain Of Responsibility Pattern)

    一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...

  7. javascript设计模式——职责链模式

    前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一 ...

  8. java设计模式---职责链模式

    职责链的本质:分离职责,动态组合 样例: /** * 定义职责对象的接口 * */ public abstract class Handler { protected Handler successo ...

  9. 设计模式 | 职责链模式(Chain of responsibility)

    定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连城一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 结构:(书中图,侵删) 一个抽象的处理者 若干 ...

随机推荐

  1. html招聘简历解析并入库测试

    1.解析4天,一天用来熟悉Jsoup 2.入库,需要熟悉什么样的格式代码可以入库,将自己解析好的代码转为指定格式.总体框架的构建, 如何执行,需要读他人写的代码(很费时间).4天,包括晚上九点加班三天 ...

  2. 添加Appicon的方法

    1.将设计好的图片,拖拽到Groups&Files的Resources目录下: 2.修改Resources目录下的“工程名-info.plist”文件 3.修改该文件的Iconfile属性,填 ...

  3. 打开自定义链接新窗口(safari JS prompt的坑!)2016.03.08

    很简单的一个小练习,但做的过程中发现safari的一个坑,使用prompt()方法的时候,点击取消和不输入一样,会返回空字符' ',而不是null! 要求: 制作新按钮,"新窗口打开网站&q ...

  4. SGU 195. New Year Bonus Grant

    时间限制:0.75s 空间限制:4M 题意: 在一颗树(最多500000个节点)中,可以对节点染色,但是一个节点染了色后,它的父节点和兄弟节点都不能再染了,求最大的染色节点数,并输出所有染色节点. S ...

  5. phpcms源码跟踪(1)

    本次跟踪解决几个问题: 1.缓存文件从哪里来,过程中被删除了怎么办 2.模板html是如何被引入的 进入首页时,通过最初的调用,进入控制器\phpcms\modules\content\index.p ...

  6. 性能测试实践-linux

    需求:线上系统性能优化,查找服务器和线上系统瓶颈 根据线上经验数据及期望值定量 数据   up down 线上数据 50 500 测试数据 100 500~2000+ 测试数据 200 500~200 ...

  7. yii2源码学习笔记(三)

    组件(component),是Yii框架的基类,实现了属性.事件.行为三类功能,如果需要事件和行为的功能,需要继承该类. yii\base\Component代码详解 <?php /** * @ ...

  8. GRUB配置

    参数讲解: default :定义缺省启动的系统 如果安装多系统的话 会有多个title 信息 可以通过设置 default: 来改变启动那个系统 默认第一个为0 第二个为1 依次类推 timeout ...

  9. CodeForces 554B(扫房间)

      CodeForces 554B Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...

  10. X86架构与ARM架构比较

    引言 CPU是怎样运作的? CPU的运作与人脑的运作差不多.先谈一下人这个系统的工作方式.眼镜.耳朵.舌头.皮肤等等感觉器官接收到“触觉”,把信息传给大脑,大脑把信息处理后,把处理结果送给手.脚.嘴等 ...