码迷,mamicode.com
首页 > 其他好文 > 详细

Chain of Responsibility(责任链)

时间:2020-11-08 17:57:51      阅读:24      评论:0      收藏:0      [点我收藏+]

标签:vat   关系   stream   std   handle   例程   his   c++源码   最大   

15. Chain of Responsibility(责任链)

15.1 定义

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

15.2 优点

  ■ 责任链模式将请求和处理分开,请求者不知道是谁处理的,处理者可以不用知道请求的全貌。

  ■ 提高系统的灵活性。

15.3 缺点

  ■ 降低程序的性能,每个请求都是从链头遍历到链尾,当链比较长的时候,性能会大幅下降。

  ■ 不易于调试,由于采用了类似递归的方式,调试的时候逻辑比较复杂。注意责任链中的节点数量需要控制,避免出现超长链的情况,这就需要设置一个最大的节点数量,超过则不允许增加节点,避免无意识地破坏系统性能。

15.3. 应用场景

  ■ 一个请求需要一系列的处理工作。

  ■ 业务流的处理,例如,文件审批。

  ■ 对系统进行补充扩展。

15.4 c++源码例程

 1 #include<iostream>
 2 using namespace std;
 3 class Player{
 4 private:
 5     Player* successor = NULL;
 6 public:
 7     virtual void handle(int i) = 0;
 8     void setSuccessor(Player* Successor){
 9         this->successor = Successor;
10     }
11     void next(int index){
12         if(successor != NULL){
13             successor->handle(index);
14         }else{
15             cout<<"游戏结束"<<endl;
16         }
17     }
18 };
19 class PlayerA:public Player{
20 public:
21     PlayerA(Player* successor){
22         this->setSuccessor(successor);
23     }
24     void handle(int i){
25         if(i==1){
26             cout<<"PlayerA 喝酒"<<endl;
27         }else{
28             cout<<"PlayerA 向下传"<<endl;
29             next(i);
30         }
31     }
32 };
33 class PlayerB:public Player{
34 public:
35     PlayerB(Player* successor){
36         this->setSuccessor(successor);
37     }
38     void handle(int i){
39         if(i==2){
40             cout<<"PlayerB 喝酒"<<endl;
41         }else{
42             cout<<"PlayerB 向下传"<<endl;
43             next(i);
44         }
45     }
46 };
47 
48 
49 int main(){
50     Player* play = new PlayerA(new PlayerB(NULL));
51     play->handle(2);
52     delete play;
53     play = NULL;
54 }

 

Chain of Responsibility(责任链)

标签:vat   关系   stream   std   handle   例程   his   c++源码   最大   

原文地址:https://www.cnblogs.com/46cxf/p/13944195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!