责任链模式
来源:互联网 发布:sql server许可模式 编辑:程序博客网 时间:2024/05/06 12:19
1、概念:
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象链成一条链,并沿着这条链传递该请求/命令,直到有对象处理它为止
注:这里的请求、命令正是可以和命令模式进行结合的地方,实际上就是利用链表把对象一个链上下一个对象。
2、角色和职责:
Handler:
处理类的抽象父类
ConcreteHandler:
具体的处理类
3、示例代码:
// 责任链模式上// 造车问题抛出,这段代码不是责任链模式,而是责任链模式的抛出#include<iostream>using namespace std;// 造车抽象类class CarHandle{public :virtual void HandleCar() = 0; // 造车抽象类接口};// 造车头class HeadCarHandle:public CarHandle{public:virtual void HandleCar(){cout << "造车头" << endl;}};// 造车身class BodyCarHandle:public CarHandle{public:virtual void HandleCar(){cout << "造车身" << endl;}};// 造车尾class TailCarHandle:public CarHandle{public:virtual void HandleCar(){cout << "造车尾" << endl;}};int main(void){HeadCarHandle *headcarhandle = new HeadCarHandle;BodyCarHandle *bodycarhandle = new BodyCarHandle;TailCarHandle *tailcarhandle = new TailCarHandle;headcarhandle->HandleCar();bodycarhandle->HandleCar();tailcarhandle->HandleCar();delete headcarhandle;delete bodycarhandle;delete tailcarhandle;return 0;}// 责任链模式 下#include<iostream>using namespace std;// 造车抽象类class CarHandle{public:virtual void HandleCar() = 0; // 造车抽象类接口CarHandle *setNextHandle(CarHandle *handle){m_carhandle = handle;return m_carhandle;}protected:CarHandle *m_carhandle;// 保存下一个数据吹单元};// 造车头class HeadCarHandle :public CarHandle{public:virtual void HandleCar(){cout << "造车头" << endl;// 造完车头以后 把任务递交给下一个处理者if (m_carhandle!=NULL){m_carhandle->HandleCar();}}};// 造车身class BodyCarHandle :public CarHandle{public:virtual void HandleCar(){cout << "造车身" << endl;// 造完车身以后 把任务递交给下一个处理者if (m_carhandle != NULL){m_carhandle->HandleCar();}}};// 造车尾class TailCarHandle :public CarHandle{public:virtual void HandleCar(){cout << "造车尾" << endl;// 造完车身以后 把任务递交给下一个处理者if (m_carhandle != NULL){m_carhandle->HandleCar();}}};int main(void){HeadCarHandle *headcarhandle = new HeadCarHandle;BodyCarHandle *bodycarhandle = new BodyCarHandle;TailCarHandle *tailcarhandle = new TailCarHandle;// 任务对的处理关系headcarhandle->setNextHandle(tailcarhandle);tailcarhandle->setNextHandle(bodycarhandle);bodycarhandle->setNextHandle(NULL);headcarhandle->HandleCar();delete headcarhandle;delete bodycarhandle;delete tailcarhandle;return 0;}
阅读全文
0 0
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- c++ 责任链模式
- java责任链模式
- 责任链模式
- Python常见数据结构-栈
- 正则表达式提取项目中所有带IP的网址
- OpenGL从1.0开始--OpenGL显示表(下)
- LeetCode 307 Range Sum Query
- 关于对lazyload的原理进行的学习
- 责任链模式
- 公路村村通
- SecureCRT 颜色方案
- 快速检索(二)之ListView的使用进行数据填充及点击事件
- Image-Universal-Loader简介
- 575. Distribute Candies
- tensorflow的共享变量的联系与区别
- GitHub教程 删除已有仓库
- Android实现签到日历控件