职责链设计模式解决if else多分支问题

来源:互联网 发布:排雷软件 编辑:程序博客网 时间:2024/05/22 04:40

具体方案具体分析,此代码适合分类业务进行的if else操作,解决多分支问题


//方案一:职责链设计模式#include <iostream>#include <vector>#include <string>#include <string.h>using namespace std;typedef string KV;class ProcessCmdFromWeb{protected:ProcessCmdFromWeb *successor;public:ProcessCmdFromWeb(){successor = NULL;}virtual int ProcessCmd(KV& in, KV& out){cout<<"**"<<endl;return 0;}void SetSuccesssor(ProcessCmdFromWeb *successor){this->successor = successor;}};class ProcessSysResQuery:public ProcessCmdFromWeb{public:int ProcessCmd(KV& in, KV& out){if(strcmp(in.c_str(), "a1") == 0){cout<<"a1"<<endl;}else if(strcmp(in.c_str(), "a2") == 0){cout<<"a2"<<endl;}else if(successor != NULL){successor->ProcessCmd(in, out);}return 0;}};class ProcessPreSeverMsg:public ProcessCmdFromWeb{public:int ProcessCmd(KV& in, KV& out){if(strcmp(in.c_str(), "b1") == 0){cout<<"b1"<<endl;}else if(strcmp(in.c_str(), "b2") == 0){cout<<"b2"<<endl;}else if(successor != NULL){successor->ProcessCmd(in,out);}return 0;}};class ProcessCmdEnd:public ProcessCmdFromWeb{public:int ProcessCmd(KV& in, KV& out){cout<<"not found"<<endl;return 0;}};int main(){ProcessCmdFromWeb *h1   = new ProcessSysResQuery;ProcessCmdFromWeb *h2   = new ProcessPreSeverMsg;ProcessCmdFromWeb *hend = new ProcessCmdEnd;h1->SetSuccesssor(h2);h2->SetSuccesssor(hend);vector<string> str1;str1.push_back("a1");str1.push_back("b2");str1.push_back("b1");vector<string>::iterator iter = str1.begin();for(; iter != str1.end(); iter++){h1->ProcessCmd(*iter,*iter);}delete h1;delete h2;delete hend;system("pause");return 0;}