本程序实现一个责任链模式查询人名的资料。

開始都是查询第一个人,问其是否有某人的资料,假设有就返回结果,假设没有第一个人就会询问第二个人,第二个人的行为和第一个人的行为一致的,然后一致传递下去,直到找到答案,或者是最后没有资料,返回。

首先创建一个基类:

//base class
class Person
{
public:
virtual void getInfo(string name) = 0;
};

第一个人的类:

主要行为函数是getInfor,就是一个if else推断,这里使用map来保存数据,要查询的数据在map里面,那么返回结果,假设不在,那么就调用下一个person的getInfo函数,等于询问下一个人,如此循环下去

//derived help
class FirstPerson : public Person
{
unordered_map<string, string> um_ss;
Person *successor;
public:
FirstPerson(Person *h) : successor(h), um_ss()
{
um_ss["Bill Gate"] = "Microsoft's founder";
um_ss["Job Steve"] = "Apple's founder";
} void getInfo(string name)
{
if (um_ss.count(name) )
{
cout<<"First person say: "<<name<<" is "<<um_ss[name]<<endl;
}
else successor->getInfo(name);
}
};

第二个人和最后一个人的类例如以下:

class SecondPerson : public Person
{
unordered_map<string, string> um_ss;
Person *successor;
public:
SecondPerson(Person *h) : successor(h), um_ss()
{
um_ss["Mark Zuckerberg"] = "Facebook's founder";
um_ss["雷军"] = "小米's founder";
} void getInfo(string name)
{
if (um_ss.count(name) )
{
cout<<"Second person say: "<<name<<" is "<<um_ss[name]<<endl;
}
else successor->getInfo(name);
}
}; class FinalPerson : public Person
{
public:
FinalPerson()
{
} void getInfo(string name)
{
cout<<"Final person say: "<<name<<" is "<<"not a famous name!\n";
}
};

这样接口也是统一的,仅仅须要问一个人就能得到答案了。

測试例如以下:

void ChainOfResponsibility_Run()
{
FinalPerson finPer; SecondPerson secPer(&finPer); FirstPerson firPer(&secPer); firPer.getInfo("雷军"); firPer.getInfo("You know who"); firPer.getInfo("Bill Gate");
}

结果:

能够看到询问的都是第一个人的类,可是因为第一个人的类会调用自身的succssor,后继类,所以会可能得到第二个人Seconde person和最后一个人Final person的回答。

最新文章

  1. [HTML5] FileReader对象
  2. [Nginx] - 负载均衡配置
  3. 使用 html5 postMessage 实现跨域
  4. Android中如何获取应用版本号
  5. HDU 4609 3-idiots FFT+容斥
  6. SOURCES的文件格式
  7. Java中String、StringBuffer、StringBuilder和toString的介绍
  8. 如何把SKYPE的发送消息由enter改为ctrl+enter?
  9. WPF案例 (五) 对控件界面使用倒影
  10. JAVA二维数组的复制
  11. css系列教程1-选择器全解
  12. 关联分析Apriori算法和FP-growth算法初探
  13. eclipse部署Tomcat9
  14. twig模板基本学习
  15. 连接mysql(建表和删表)
  16. bzoj 1006
  17. 微信小程序开发填坑指南V1
  18. [Java]判断Integer值相等最好不用==最好使用equals
  19. 从EnableJpaRepositories说开去
  20. SVN更新的问题

热门文章

  1. CodeForces 508C Anya and Ghosts 贪心
  2. ZOJ 3872 Beauty of Array DP 15年浙江省赛D题
  3. POJ 1379 Run Away 【基础模拟退火】
  4. onekey_fourLED
  5. 基于visual Studio2013解决C语言竞赛题之0507筛选素数
  6. VC命令行编译参数介绍
  7. adxl345的STM32驱动程序和硬件设计
  8. Android 涂鸦最佳实践
  9. Linux 下IOport编程訪问
  10. [概率dp] ZOJ 3822 Domination