标签:vat 关系 stream std handle 例程 his 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 }
标签:vat 关系 stream std handle 例程 his c++源码 最大
原文地址:https://www.cnblogs.com/46cxf/p/13944195.html