职责链模式

来源:互联网 发布:混合线性模型 知乎 编辑:程序博客网 时间:2024/05/29 10:58

简介

职责链模式:

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并且沿着这条链传递请求,知道有一个对象处理它为止。

常用的场景

1.有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 

2.在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 

3.可动态指定一组对象处理请求。

优点:

1. 将请求和处理分开,达到解耦,迪米特。

缺点:

1. 链长度过长时就会有效率问题,其次是调试问题(这个问题也类似于递归)

测试代码

 

#include <iostream>#include <assert.h>#include <vector>using namespace std;#include <string>#include <list>class FBaseHandler{public:virtual void handle(int x) = 0;virtual void setHandler(FBaseHandler* handler){m_pHighHander = handler;}protected:FBaseHandler* m_pHighHander;};class FHanderA : public FBaseHandler{public:void handle(int x){if( x > 0 && x< 10 ){//to do}else if(m_pHighHander != NULL){m_pHighHander->handle(x);}}};class FHanderB : public FBaseHandler{public:void handle(int x){if( x > 10 && x< 100 ){//to do}else if(m_pHighHander != NULL){m_pHighHander->handle(x);}}};void main(){FHanderA* pAHandler = new FHanderA();FHanderB* pBHandler = new FHanderB();pAHandler->setHandler(pAHandler);pAHandler->handle(10);delete pBHandler;delete pAHandler;}

原创粉丝点击