#pragma once#ifndef CHAINOFRESPONSIBILITY_H #define CHAINOFRESPONSIBILITY_H #include <stdio.h> // 抽象基类,定义一个处理请求的接口
class Handler
{
public: Handler(Handler *pSuccessor = NULL); virtual ~Handler(); // 纯虚函数,由派生类实现 virtual void HandleRequest() = 0; protected: Handler* m_pNextHandler; //if pNextHandler is null,handler it itself
}; class ConcreateHandler1 : public Handler
{
public: ConcreateHandler1(Handler *pNextHandler = NULL) : Handler(pNextHandler){} virtual ~ConcreateHandler1(){} virtual void HandleRequest();
}; class ConcreateHandler2 : public Handler
{
public: ConcreateHandler2(Handler *pNextHandler = NULL) : Handler(pNextHandler){} virtual ~ConcreateHandler2(){} virtual void HandleRequest();
}; #endif 
#include "StdAfx.h"
#include "chainofresponsibility_impl.h"#include <iostream> Handler::Handler(Handler *pNextHandler /* = NULL*/)
: m_pNextHandler(pNextHandler)
{
} Handler::~Handler()
{ delete m_pNextHandler; m_pNextHandler = NULL;
} void ConcreateHandler1::HandleRequest()
{ if (m_pNextHandler) { std::cout <<"HandleRequest not by ConcreateHandler1,Transfer Next\n";m_pNextHandler->HandleRequest(); } else { std::cout << "HandleRequest by ConcreateHandler1\n"; }
}void ConcreateHandler2::HandleRequest()
{ if (m_pNextHandler) { std::cout <<"HandleRequest not by ConcreateHandler2,Transfer Next\n";m_pNextHandler->HandleRequest(); } else { std::cout << "HandleRequest by ConcreateHandler2\n"; }
}
// ChainOfResponsibility.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include "chainofresponsibility_impl.h"
#include <stdlib.h>
//使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.
//将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.
int _tmain(int argc, _TCHAR* argv[])
{// p2::handlerequest-->p1::handlerequestHandler *p1 = new ConcreateHandler1(/*pNextHandler*/); Handler *p2 = new ConcreateHandler2(p1); p2->HandleRequest(); delete p2; system("pause");return 0;
}

设计模式-行为-职责链相关推荐

  1. 【设计模式】—— 职责链模式ChainOfResponsibility

    模式意图 避免请求的发送者,和接受者过度的耦合在一起.一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心.而请求的接受者可以自己处理它,也可以把它像链条一样向后传. 因 ...

  2. python设计模式案例分析_Python设计模式之职责链模式原理与用法实例分析

    本文实例讲述了Python设计模式之职责链模式原理与用法.分享给大家供大家参考,具体如下: 职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接 ...

  3. 设计模式之职责链模式应用例题

    设计模式之职责链模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 在军队中,一般根据战争规模的大小和重要性由不同级别的长官(Officer)来下达作战命令,情报人员向上级递交军 ...

  4. 【设计模式】职责链模式(C#)

    [设计模式]职责链模式 1.概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同.例如,公司员工请假或者加薪,可处理的领导有HR.部门负责人.副总经理. ...

  5. 设计模式之职责链模式(Chain of Responsibility)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. 设计模式之职责链模式、减小了因为分支带来的耦合

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

  7. 设计模式复习-职责链模式

    #pragma once #include "stdafx.h" #include<set> #include<string> #include<io ...

  8. 『设计模式』职责链模式(Chain of Responsibility) 可怜的加薪、请假之路

    23种设计模式+额外常用设计模式汇总 (持续更新) 问题抽象 客户端发出一个请求,会有很多对象都可以来处理这个请求,而且不同对象的处理逻辑是不一样的. 对于客户端而言,无所谓谁来处理,反正有对象处理就 ...

  9. JBPM与设计模式之职责链模式

    上篇我们了解并学习了JBPM的长事务实现,其中用到了设计模式中的职责链模式和命令模式:这块还是很有厚重感的,我们可以从中学到很多的东西:今天我们先来学习一下职责链模式. 职责链模式定义 使多个对象都有 ...

  10. C++设计模式14——职责链模式

    https://blog.csdn.net/CoderAldrich/article/details/83183388 什么是职责链模式? 在GOF的<设计模式:可复用面向对象软件的基础> ...

最新文章

  1. 程序员如何乘风破浪?从数据库历史看技术人发展 | CSDN 高校俱乐部
  2. 快速沃尔什变换(FWT)及K进制异或卷积快速子集变换(FST)讲解
  3. python模块收集
  4. IE6 CSS的一个bug
  5. django 操作MySQL 中文乱码_Django 连接mysql数据库中文乱码
  6. springboot + mybatis +easyUI整合案例
  7. mysql附加数据库失败_我的数据库为什么附加不上去?
  8. 《黑客攻防技术-系统实战》开篇讲解
  9. 无法定位程序输入点于动态链接库上的解决方法分享
  10. 超全!Python 处理日期与时间的全面总结!
  11. switch基础用法
  12. 婚恋交友网站比相亲更靠谱!幸福婚姻算法了解一下
  13. cesium 缩放_cesium 缩放中心点控制
  14. 32种EMC标准电路 (共用)
  15. GetPrivateProfileString函数之新手上路
  16. android .9图片的使用
  17. 【Aegisub相关】loop修饰语实现对应的源码
  18. python环境迁移:从联网笔记本到离线服务器
  19. Java应届生大学四年怎么做,可以毕业就进入华为工作,上个月成功拿到阿里P7offer
  20. 会员流失预测模型+会员特征分析模型+营销响应预测模型

热门文章

  1. mongodb一致性协议_mongodb副本集用一致性快照方法添加从节点步骤
  2. 链表的有序集合_JAVA
  3. 面试题整理 4 合并两个排序的数组
  4. 【Socket网络编程】14. perror()、errno 的使用
  5. 小瓜牛漫谈 — String、StringBuffer、StringBuilder
  6. 官网PYthon语言参考手册The Python Language Reference
  7. 数据分类:决策树Decision Tree
  8. Day 20: 斯坦福CoreNLP —— 用Java给Twitter进行情感分析
  9. 编程之美-重建二叉树方法整理
  10. npm包全局安装和局部安装,执行包命令有什么不同?