责任链模式(Chain of Responsibility, COR)是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连。
适用于:
链条式处理事情。工作流程化、消息处理流程化、事物流程化
优点:
1。责任的分担。每个类只需要处理自己该处理的工作(不该处理的传递给下一个对象完成),明确各类的责任范围,符合类的最小封装原则。
2。可以根据需要自由组合工作流程。如工作流程发生变化,可以通过重新分配对象链便可适应新的工作流程。
3。类与类之间可以以松耦合的形式加以组织。
缺点:
因为处理时以链的形式在对象间传递消息,根据实现方式不同,有可能会影响处理的速度。
结构图 简单实现类似于链表,有一个后继指针。通过递归进行遍历。
#includeusing namespace std; class Handler{ public: virtual void HandleRequest()=0; void setNext(Handler* handle){ next=handle; } protected: Handler* next; }; class ConcreteHandler_A: public Handler{ public: void HandleRequest(){ cout<<"ConcreteHandler_A"< HandleRequest(); } }; class ConcreteHandler_B: public Handler{ public: void HandleRequest(){ cout<<"ConcreteHandler_B"< HandleRequest(); } }; class ConcreteHandler_C: public Handler{ public: void HandleRequest(){ cout<<"ConcreteHandler_C"< HandleRequest(); } }; int main(){ Handler *handle1=new ConcreteHandler_A(); Handler *handle2=new ConcreteHandler_B(); Handler *handle3=new ConcreteHandler_C(); handle1->setNext(handle2); handle2->setNext(handle3); handle3->setNext(NULL); handle1->HandleRequest(); delete handle3; delete handle2; delete handle1; return 0; }



