Chain Of Responsibility(职责连)-对象行为型模式
2016-06-26 12:45
495 查看
1.意图
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
2.动机
给多个对象处理一个请求的机会,从而解耦发送者和接收者。
3.适用性
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
4.结构
5.代码实例
6.测试结果
以上结果为每个handler执行后均调用上一级的handler执行。
7.效果
降低耦合度 该模式使得一个对象无需知道是其他哪一个对象处理其请求。
增强了给对象指派职责的灵活性
不保证被接受
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
2.动机
给多个对象处理一个请求的机会,从而解耦发送者和接收者。
3.适用性
有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
可处理一个请求的对象集合应被动态指定。
4.结构
5.代码实例
//Handler.h #include <memory> class AbstractHandler { public: virtual void HandleRequest() = 0; virtual void SetHandler(std::shared_ptr<AbstractHandler> pHandler); protected: std::shared_ptr<AbstractHandler> m_pHandler; }; class BaseHandler : public AbstractHandler { public: virtual void HandleRequest(); }; class ConcreteHandler1 : public BaseHandler { public: void HandleRequest(); }; class ConcreteHandler2 : public BaseHandler { public: void HandleRequest(); };
//Handler.cpp #include <iostream> #include "Handler.h" void AbstractHandler ::SetHandler(std::shared_ptr<AbstractHandler> pHandler) { m_pHandler = pHandler; }; void BaseHandler ::HandleRequest() { std::cout << "Base Handler Handled" << std::endl; }; void ConcreteHandler1 ::HandleRequest() { std::cout << "ConcreteHandler1 Handled" << std::endl; m_pHandler->HandleRequest(); }; void ConcreteHandler2 ::HandleRequest() { std::cout << "ConcreteHandler2 Handled" << std::endl; m_pHandler->HandleRequest(); };
//client #include "Handler.h" int main() { std::shared_ptr <AbstractHandler> pConcreteHandler1(new ConcreteHandler1); std::shared_ptr <AbstractHandler> pConcreteHandler2(new ConcreteHandler2); std::shared_ptr <AbstractHandler> pBaseHandler(new BaseHandler); pConcreteHandler1->SetHandler(pConcreteHandler2); pConcreteHandler2->SetHandler(pBaseHandler); pConcreteHandler1->HandleRequest(); while(1); }
6.测试结果
以上结果为每个handler执行后均调用上一级的handler执行。
7.效果
降低耦合度 该模式使得一个对象无需知道是其他哪一个对象处理其请求。
增强了给对象指派职责的灵活性
不保证被接受
相关文章推荐
- HDU 1848 Fibonacci again and again(学习sg函数后写出来的第一个题)
- 写一个brainfuck语言的解释器
- hdu 1532 Drainage Ditches(最大流,Edmond Karp)
- lintcode_2 Trailing Zeros
- 人工智能作业homework5------naive bayes/svm文本分类
- 【转载】Multithreaded toolkits: A failed dream? From Sun VP Graham Hamilton's Blog
- CodeForces 567A Lineland Mail
- 职责链模式(Chain of Responsibility)
- 解决:HttpClient导致应用出现过多Close_Wait的问题
- This implementaion is not part of the windows platform fips validated cryptographic algorithms.
- pip/easy_install failure: failed to create process
- 2016 Al-Baath University Training Camp Contest-1(gym101028)
- From detailed models to formal spiking neurons
- UART Explained(转载)
- 【USACO题库】4.2.1 Drainage Ditches草地排水
- 李开复:人工智能可能会让一半人失业
- wait 和waitpid 的使用
- 解密谷歌机器学习忍者项目,如此培养人工智能人才
- saiku踩坑记录
- Leetcode 11 Container With Most Water