12、命令模式(command)

原始工作流程:


命令人          找甲      让其做甲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;


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值