命令(command)模式的結構很簡單,但是對于消除代碼間的耦合,清理代碼去有著重要的影響。從最直觀的角度來看,命令模式就是一個函數對象:一個作為對象的函數。通過將函數封裝為對象,就能夠以參數的形式將其傳遞給其他函數或者對象,告訴它們在履行請求的過程中執行特定的操作。可以說,命令模式是攜帶行為信息的信使。一個簡單的例子如下:
#include<iostream>
#include<vector>
using namespace std;
class Command
{
public:
virtual void execute()=0;
};
class Hello: public Command
{
public:
void execute(){cout<<"hello ";}
};
class World : public Command
{
public:
void execute(){cout<<"world!";}
};
class IAm:public Command
{
public:
void execute(){cout<<"I'm the command pattern!";}
};
class Macro
{
vector<Command *>commands;
public:
void add(Command *c){commands.push_back(c);}
void run()
{
vector<Command*>::iterator it=commands.begin();
while(it!=commands.end())
{
(*it++)->execute();
cout<<endl;
}
}
};
int main()
{
Macro macro;
macro.add(new Hello);
macro.add(new World);
macro.add(new IAm);
macro.run();
}
命令模式的主要特點是允許向一個函數或者對象傳遞一個想要的動作。上述例子提供了將一系列需要一起執行的動作集進行排隊的方法。在這里,可以動態創建新的行為,某些事情通常只能通過編寫新的代碼來完成,而在上述例子中可以通過解釋一個腳本來實現。
參考:c++編程思想2