大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例
1. 职责链模式: 使多个对象都有机会处理请求,从而避免请求发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
当客户提交一个请求时,请求是沿着链传递直到有一个ConcreteHandler对象负责处理它,接收者和发送者都没有对方的明确信息,且链中的对象并不知道链的结构。
结果是职责链可以简化对象的互相连接,他们仅需一个指向其后继者的引用,而不需要保持它所有后继者的引用。
一个请求极有可能到了链的最末端还是得不到处理,或者没有正确配置而得不到处理,需要事先考虑全面。
实例:
handler.h handler.cpp
- #ifndef HANDLER_H
- #define HANDLER_H
- class Handler
- {
- public:
- Handler();
- ~Handler();
- void setSuccessor(Handler *successor);
- void virtual handlerRequest(int request)=0;
- protected:
- Handler *successor;
- };
- #endif // HANDLER_H
- #include "handler.h"
- Handler::Handler()
- {
- successor = 0;
- }
- Handler::~Handler()
- {
- delete successor;
- }
- void Handler::setSuccessor(Handler *successor)
- {
- this->successor = successor;
- }
concretehandler1.h concretehandler1.cpp
- #ifndef CONCRETEHANDLER1_H
- #define CONCRETEHANDLER1_H
- #include "handler.h"
- class ConcreteHandler1 : public Handler
- {
- public:
- ConcreteHandler1();
- void handlerRequest(int request);
- };
- #endif // CONCRETEHANDLER1_H
- #include "concretehandler1.h"
- #include <stdio.h>
- ConcreteHandler1::ConcreteHandler1()
- {
- }
- void ConcreteHandler1::handlerRequest(int request)
- {
- if( request >=0 && request < 10 )
- {
- printf("ConcreteHandler1 handlerRequest\n");
- }
- else
- {
- if( successor!=0 )
- {
- printf("the next one handler\n");
- successor->handlerRequest(request);
- }
- }
- }
concretehandler2.h concretehandler2.cpp
- #ifndef CONCRETEHANDLER2_H
- #define CONCRETEHANDLER2_H
- #include "handler.h"
- class ConcreteHandler2 : public Handler
- {
- public:
- ConcreteHandler2();
- void handlerRequest(int request);
- };
- #endif // CONCRETEHANDLER2_H
- #include "concretehandler2.h"
- #include <stdio.h>
- ConcreteHandler2::ConcreteHandler2()
- {
- }
- void ConcreteHandler2::handlerRequest(int request)
- {
- if( request >=10 && request < 20 )
- {
- printf("ConcreteHandler2 handlerRequest\n");
- }
- else
- {
- if( successor!=0 )
- {
- printf("the next one handler\n");
- successor->handlerRequest(request);
- }
- }
- }
main.cpp
- #include <iostream>
- #include "concretehandler1.h"
- #include "concretehandler2.h"
- using namespace std;
- int main()
- {
- cout << "Chain_of_responsibility test!" << endl;
- Handler *h1 = new ConcreteHandler1();
- Handler *h2 = new ConcreteHandler2();
- h1->setSuccessor(h2);
- h1->handlerRequest(15);
- return 0;
- }
大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例的更多相关文章
- 设计模式:职责链模式(Chain of Responsibility)
去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
- 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 Pattern 行为型 设计模式(十七)
责任链模式(Chain of Responsibility Pattern) 职责链模式 意图 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这些对象连接成一条链,并沿着这 ...
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
随机推荐
- STM32 寄存器库和固件库
寄存器和固件库开发的差别和联系 固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道.向上提供用户函数调用的接口(API). 在 51 的开发中我们经常的作法是直接操作寄存器,比方要控制 ...
- Codeforces Round #275 (Div. 2) C
题目传送门:http://codeforces.com/contest/483/problem/C 题意分析:题目意思没啥好说的. 去搞排列列举必须TLE.那么就想到构造. 1.n.2.n-1.3.n ...
- 基于java spring框架开发部标1078视频监控平台精华文章索引
部标1078视频监控平台,是一个庞杂的工程,涵盖了多层协议,部标jt808,jt809,jt1078,苏标Adas协议等,多个平台功能标准,部标796标准,部标1077标准和苏标主动安全标准,视频方面 ...
- Linux高并发应用类型对系统内核的优化
Linux操作系统内核参数优化 net.ipv4.tcp_max_tw_buckets = net.ipv4.ip_local_port_range = net.ipv4.tcp_tw_recycle ...
- 嵌入式开发之simulation--- 双目移动dsp机器人
http://foundy.blog.163.com/blog/static/263383442014112391130207/
- 什么是scale up和scale out
Scale Out(也就是Scale horizontally)横向扩展,向外扩展Scale Up(也就是Scale vertically)纵向扩展,向上扩展无论是Scale Out,Scale Up ...
- PHP中foreach用法详细讲解
1.foreach是什么? foreach是PHP的一种语法结构,其实就是一个工具,(工具:就是工作的时候用到的器具),那么在程序开发过程中,为了达到程序效果,就用到了foreach. 2.如何用? ...
- 优化tomcat启动速度
1.去掉不需要的jar包,这样tomcat在启动时就可以少加载jar包里面的class文件. 2.跳过一些与TLD files.注解.网络碎片无关的jar包,通过在conf/catalina.prop ...
- Action三种编写方式
1. 创建普通类不实现接口与继承类 2. 实现Action接口 3. 继承ActionSupport类(常用)
- 15.Django添加一个功能模块的步骤(和SpringMVC类比)
这里介绍如何在Django里新建一个模块,这个例子还是最简单的例子 通过浏览器访问 http://localhost:8000/hello/然后返回一个欢迎页 我是做java web出身的,这里用py ...