原始工作流程:
命令人 找甲 让其做甲A--》甲B--》甲D (完成1任务)
找乙 让其做乙A--》乙C--》乙E (完成2任务)
找丙 让其做丙A--》丙C--》丙D (完成3任务)
命令模式工作流程:(将每个任务封装成一个命令类)
命令人 接受命令人 命令1 (完成1任务)
命令2 (完成2任务)
命令3 (完成3任务)
命令n (完成n任务)
命令模式:
是把原来需要找不同的人来完成不同方面的工作这个做事过程改变成找同一个人来完成不同方面的工作。
把每一个工作都需要完成的事情都按照同样的结构流程封装起来作为一个命令,让一个人来管理所有的命令,这样找这一个应答诉求的人,告诉他需要完成的命令,就可以了。
int main()
{
no_use_command(); //客户原来的运行流程
//客户觉得麻烦了,每次改动都要找不同的组,谈不同的事
//客户只想找一个人,告诉他要做什么就可以,不想关心由哪几个组来做和怎么做
use_command(); //使用命令模式调用
return 0;
}
void no_use_command()
{
cout << TAG << "----no_use_command()------客户想增加一个需求----------" << endl;
IGroup *rg = new CRequirementGroup();
rg->Find();
rg->Add();
rg->Plan();
delete rg;
cout << endl;
cout << TAG << "----no_use_command()------客户又想修改一个页面----------" << endl;
IGroup *pg = new CPageGroup();
pg->Find();
pg->Change();
pg->Plan();
delete pg;
cout << endl;
cout << TAG << "----no_use_command()------客户又想删除一个功能----------" << endl;
IGroup *cg = new CCodeGroup();
cg->Find();
cg->Delete();
cg->Plan();
delete cg;
}
void use_command()
{
cout << TAG << "-----use_command()-----客户觉得烦了,希望只找一个人,并告诉他要做什么----------" << endl;
cout << TAG << "-----use_command()-----客户要求增加一项需求----------" << endl;
CInvoker gary; //祈求者
ICommand *pcommand = new CAddRequirementCommand();
gary.SetCommand(pcommand);
gary.Action();
delete pcommand;
cout << endl;
//客户想要删除一个页面只需要找CInvoker就可以了
cout << TAG << "-----use_command()-----删除一个页面----------" << endl;
CInvoker ricky;
ICommand *pcommand2 = new CDeletePageCommand();
ricky.SetCommand(pcommand2);
ricky.Action();
delete pcommand2;
}
命令人 找甲 让其做甲A--》甲B--》甲D (完成1任务)
找乙 让其做乙A--》乙C--》乙E (完成2任务)
找丙 让其做丙A--》丙C--》丙D (完成3任务)
命令模式工作流程:(将每个任务封装成一个命令类)
命令人 接受命令人 命令1 (完成1任务)
命令2 (完成2任务)
命令3 (完成3任务)
命令n (完成n任务)
命令模式:
是把原来需要找不同的人来完成不同方面的工作这个做事过程改变成找同一个人来完成不同方面的工作。
把每一个工作都需要完成的事情都按照同样的结构流程封装起来作为一个命令,让一个人来管理所有的命令,这样找这一个应答诉求的人,告诉他需要完成的命令,就可以了。
int main()
{
no_use_command(); //客户原来的运行流程
//客户觉得麻烦了,每次改动都要找不同的组,谈不同的事
//客户只想找一个人,告诉他要做什么就可以,不想关心由哪几个组来做和怎么做
use_command(); //使用命令模式调用
return 0;
}
void no_use_command()
{
cout << TAG << "----no_use_command()------客户想增加一个需求----------" << endl;
IGroup *rg = new CRequirementGroup();
rg->Find();
rg->Add();
rg->Plan();
delete rg;
cout << endl;
cout << TAG << "----no_use_command()------客户又想修改一个页面----------" << endl;
IGroup *pg = new CPageGroup();
pg->Find();
pg->Change();
pg->Plan();
delete pg;
cout << endl;
cout << TAG << "----no_use_command()------客户又想删除一个功能----------" << endl;
IGroup *cg = new CCodeGroup();
cg->Find();
cg->Delete();
cg->Plan();
delete cg;
}
void use_command()
{
cout << TAG << "-----use_command()-----客户觉得烦了,希望只找一个人,并告诉他要做什么----------" << endl;
cout << TAG << "-----use_command()-----客户要求增加一项需求----------" << endl;
CInvoker gary; //祈求者
ICommand *pcommand = new CAddRequirementCommand();
gary.SetCommand(pcommand);
gary.Action();
delete pcommand;
cout << endl;
//客户想要删除一个页面只需要找CInvoker就可以了
cout << TAG << "-----use_command()-----删除一个页面----------" << endl;
CInvoker ricky;
ICommand *pcommand2 = new CDeletePageCommand();
ricky.SetCommand(pcommand2);
ricky.Action();
delete pcommand2;
}