- 浏览: 357775 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
头文件
//ChainOfResponsibilityPattern.h #ifndef CHAIN_OF_RESPONSIBILITY_PATTERN_H #define CHAIN_OF_RESPONSIBILITY_PATTERN_H #include <Windows.h> #include <iostream> using namespace std; #define SAFE_DELETE(p) if (p) { delete p; p = NULL; } namespace ChainOfResponsibilityPattern { ////////////////////////////////////////////////////////////////////////// class HolidayRequest { public: HolidayRequest(int hour); int GetHour(); private: int m_iHour; }; //The holiday request handler interface class Manager { public: Manager(); virtual ~Manager(); virtual bool HandleRequest(HolidayRequest* pRequest) = 0; }; // Project manager class PM : public Manager { public: PM(Manager *handler); virtual ~PM(); bool HandleRequest(HolidayRequest* pRequest); private: Manager *m_pHandler; }; // Department manager class DM : public Manager { public: DM(Manager *handler); virtual ~DM(); bool HandleRequest(HolidayRequest* pRequest); // The department manager is in? bool IsIn(); private: Manager *m_pHandler; }; // Project supervisor class PS : public Manager { public: PS(Manager *handler); virtual ~PS(); bool HandleRequest(HolidayRequest* pRequest); private: Manager *m_pHandler; }; ////////////////////////////////////////////////////////////////////////// void ChainOfResponsibilityPattern_Test(); } #endif
实现
#include "ChainOfResponsibilityPattern.h" namespace ChainOfResponsibilityPattern { ////////////////////////////////////////////////////////////////////////// HolidayRequest::HolidayRequest(int hour) : m_iHour(hour) {} int HolidayRequest::GetHour() { return m_iHour; } ////////////////////////////////////////////////////////////////////////// Manager::Manager(){} Manager::~Manager(){} ////////////////////////////////////////////////////////////////////////// PM::PM(Manager *handler) : m_pHandler(handler) {} PM::~PM() {} bool PM::HandleRequest(HolidayRequest *pRequest) { if (pRequest->GetHour() <= 2 || m_pHandler == NULL) { cout<<"PM said:OK, it's Over!"<<endl; return true; } else { cout<<"PM said:OK, transfer to next Manager."<<endl; return m_pHandler->HandleRequest(pRequest); } } // Department manager ////////////////////////////////////////////////////////////////////////// DM::DM(Manager *handler) : m_pHandler(handler) {} DM::~DM() {} bool DM::HandleRequest(HolidayRequest *pRequest) { cout<<"DM said:OK, it's Over!"<<endl; return true; } // The department manager is in? bool DM::IsIn() { return true; } // Project supervisor ////////////////////////////////////////////////////////////////////////// PS::PS(Manager *handler) : m_pHandler(handler) {} PS::~PS() {} bool PS::HandleRequest(HolidayRequest *pRequest) { DM *pDM = dynamic_cast<DM *>(m_pHandler); if (pDM != NULL) { if (pDM->IsIn()) { return pDM->HandleRequest(pRequest); } } cout<<"PS said:OK, it's Over!"<<endl; return true; } ////////////////////////////////////////////////////////////////////////// void ChainOfResponsibilityPattern_Test() { DM *pDM = new DM(NULL); PS *pPS = new PS(pDM); PM *pPM = new PM(pPS); HolidayRequest *pHolidayRequest = new HolidayRequest(10); pPM->HandleRequest(pHolidayRequest); SAFE_DELETE(pHolidayRequest); pHolidayRequest = new HolidayRequest(2); pPM->HandleRequest(pHolidayRequest); SAFE_DELETE(pDM); SAFE_DELETE(pPS); SAFE_DELETE(pPM); SAFE_DELETE(pHolidayRequest); } }
客户端
#include "ChainOfResponsibilityPattern.h" #include <iostream> using namespace std; using namespace ChainOfResponsibilityPattern; void main() { ChainOfResponsibilityPattern_Test(); }
PM said:OK,transfer to next Manager. DM said:OK,it's Over! PM said:OK,it's Over!
- Diagram.zip (1021 KB)
- 下载次数: 0
发表评论
-
FreeRTOS
2022-03-05 16:31 216Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 373https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1257https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 436https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 537// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 542https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5338583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 559参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2060基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 8681 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1530OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1840ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 827转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1829转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1013C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 938转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 946转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 769参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1547转自 http://blog.csdn.net/weixinh ...
相关推荐
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
设计模式:详细描述创建型、结构型、行为型,简单容易理解
NULL 博文链接:https://jacky-dai.iteye.com/blog/2304940
NULL 博文链接:https://jacky-dai.iteye.com/blog/2309028
NULL 博文链接:https://jacky-dai.iteye.com/blog/2306606
NULL 博文链接:https://jacky-dai.iteye.com/blog/2304685
设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于...
* 责任链模式:责任链模式是一种行为型模式,它可以将对象之间的关系建立在责任链的基础上,以便于更好地实现对象之间的关系。 * 命令模式:命令模式是一种行为型模式,它可以将对象之间的关系建立在命令的基础上,...
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软 件工程的基石,如同大厦的一块块砖石一样。...
为了避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,职责链模式又称为责任链模式,它是一种对象行为型模式。(如果你接触...
第19界Jolt大奖获奖作品 项目百态 深入理解软件项目行为模式
NULL 博文链接:https://jacky-dai.iteye.com/blog/2309033
NULL 博文链接:https://jacky-dai.iteye.com/blog/2309031
NULL 博文链接:https://jacky-dai.iteye.com/blog/2309027
NULL 博文链接:https://jacky-dai.iteye.com/blog/2306674