目的:弱化发出请求的对象和处理请求对象的之间的关系

理解:每个处理请求的对象仅仅只关注自己能处理的请求,不关系其他请求

优点:

  • 无需一个管理类来匹配所有的请求,更灵活
  • 责任链可以动态的调整
  • Andorid中事件处理框架就使用了责任链模式

继承关系图:

例子:

class Trouble
{
int num;
public:
Trouble(int num)
{
this->num = num;
} int getNum()
{
return num;
}
};
class Handler
{
string name;
Handler* next;
public:
Handler(string name)
{
this->name = name;
next = NULL;
} Handler* setNext(Handler* next)
{
this->next = next;
return next;
} void handler(Trouble* t)
{
if(resolve(t))
{
cout << "Trouble num = " << t->getNum() << " is solve by " << name << endl;
}
else if(next != NULL)
{
next->handler(t);
}
else
{
cout << "Trouble num = " << t->getNum() << " can't solve" << endl;
}
} virtual bool resolve(Trouble* t)
{
return false;
}
}; class LittleHandler: public Handler
{
public:
LittleHandler(string name) : Handler(name)
{
} virtual bool resolve(Trouble* t)
{
bool ret = false; if(t->getNum() < 10)
{
ret = true;
} return ret;
}
}; class BiggerHandler: public Handler
{
public:
BiggerHandler(string name) : Handler(name)
{
} virtual bool resolve(Trouble* t)
{
bool ret = false; if(t->getNum() > 10)
{
ret = true;
} return ret;
}
};
int main()
{
Handler* h = new Handler("handler");
LittleHandler* lh = new LittleHandler("littleHandler");
BiggerHandler* bh = new BiggerHandler("biggerHandler");
h->setNext(lh)->setNext(bh); Trouble* t1 = new Trouble(5);
h->handler(t1); Trouble* t2 = new Trouble(15);
h->handler(t2); return 0;
}

最新文章

  1. 防火墙防DDOS攻击的简单设置
  2. CSS3妙用
  3. Hanoi问题
  4. Sum of Left Leaves
  5. OpenCV 绘制图像直方图
  6. Ubuntu安装Fcitx(小企鹅五笔输入法)
  7. Python 中的 TK编程
  8. asp.net上传大文件
  9. linux file命令小记
  10. LIS算法
  11. Python新式类与经典类的区别
  12. 【转】Shell执行MySql操作
  13. Appium系列文章(1)获取appPackage和appActivity
  14. 使用springboot actuator监控应用
  15. Gym 100712
  16. Mysql高级查询 内连接和外连接详解
  17. apacheh2.4和php5.5集成环境遇到的问题
  18. Azure 认知服务 (3) 计算机视觉API - 分析图像,使用C#代码
  19. [转]Greenplum 资源隔离的原理与源码分析
  20. MySQL存储引擎中的MyISAM和InnoDB

热门文章

  1. HTML躬行记(1)——SVG
  2. Python-17-作用域
  3. tomcat中AJP协议和HTTP协议的区别
  4. JavaScript this 关键词
  5. IDEA创建SpringBoot的多模块项目教程
  6. node+ajax实战案例(4)
  7. 【树形dp】Bzoj 1040骑士
  8. 策略模式、策略模式与Spring的碰撞
  9. 看看有哪些 Web 攻击技术.
  10. 一.django初识