2011年(9)
分类: C/C++
2011-10-04 23:43:21
案例:一个IT 项目小组通常有Requirement Group、Page Group、Code Group。通常还有一个项目经理。有一个甲方很厉害啊,他给Requirement Group 说了,我要添加一个功能。
定义一个Group类
#ifndef _GROUP_H_定义Requirement Group 、Page Group 、Code Group三个类
#ifndef _CG_H_Main方法:
#include "cg.h"
#include "pg.h"
#include
int main()
{
group *c = new cg;
c->find();
c->add();
c->del();
c = new pg;
c->find();
c->add();
c->del();
}
甲方疯了,添加一个需求给需求组说了,那么页面组呢,代码组呢? 一个一个都通知一下?太麻烦了。这个任务还是给项目经理吧,项目经理执行添加需求命令,执行去吧。甲方省事了吧!
command.h:
#ifndef _COMMAND_H_
#define _COMMAND_H_
#include "cg.h"
#include "rg.h"
#include
class command
{
public:
virtual void exec() = 0 ;
virtual ~command(){};
protected:
cg codegroup;
rg requirementgroup;
};
#endif
addrequirement.h(concrete command)
#ifndef _ADDREQUIREMENT_H_Command 优点:
1 类间解耦:调用者和执行者之间没有任何依赖关系,调用者只需要执行相应命令就可以了
2 可扩展性: Command的子类非常容易扩展,调用者(Invoker)和高层次的模块Client不产生严重的代码耦合。
3 命令模式可以结合其他模式,譬如模板方法模式,解决Command类膨胀的问题。
缺点:
有N个命令,就有N个Command子类,膨胀太大了。