责任链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
责任链模式
概要分析:
一个请求,需要经过一些列的对象进行操作时使用。
在实现时,要注意指定好下一个执行者,直到最终所有执行完才算结束。
如:请假条需要组长,部门领导,公司领导依次审批才有效。
注意:过滤器与责任链实现类似,只是在链上找到有一个处理就处理,否则就处理失败。
源码Demo:
/**************************************************************************************************** 链式 概念(使用一个单链表,尾结点指向空,然后挨个遍历此结点指向的函数(这些函数都来自与抽象类中函数的重写) 将则责任链上的对象统统创建出来,然后执行到哪个对象,哪个对象就去调用这个重写的函数方法) 适用于: 链条式处理事情。工作流程化、消息处理流程化、事物流程化; ****************************************************************************************************/ #include <iostream> using namespace std; class CarHandle//责任链,设计一个类将其创建成链 { public: virtual void HandleCar() = 0; public: CarHandle *setNextHandle(CarHandle *carhandle) { this->carhandle = carhandle; return this->carhandle; } protected: CarHandle *carhandle; }; class CarHandleHead : public CarHandle { public: virtual void HandleCar() { cout << "车头处理" << endl; if (this->carhandle != NULL){ carhandle->HandleCar(); } } }; class CarHandleBody : public CarHandle { public: virtual void HandleCar() { cout << "车身处理" << endl; if (this->carhandle != NULL){ carhandle->HandleCar(); } } }; class CarHandleTail : public CarHandle { public: virtual void HandleCar() { cout << "车尾处理" << endl; if (this->carhandle != NULL){ carhandle->HandleCar(); } } }; class CarHandleyou : public CarHandle { public: virtual void HandleCar() { cout << "handle you success" << endl; if (this->carhandle != NULL) { carhandle->HandleCar(); } } }; int main() { CarHandleHead *head = new CarHandleHead; CarHandleBody *body = new CarHandleBody; CarHandleTail *tail = new CarHandleTail; //这里是创建一些列的对象,对象包含下一个结点的指针 CarHandleyou *you = new CarHandleyou; head->setNextHandle(body);//在这里将这些函数使用链表串起来 body->setNextHandle(tail); tail->setNextHandle(you); you->setNextHandle(NULL); //处理 head->HandleCar(); delete head; delete body; delete tail; delete you; // system("pause"); return 0; }