抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

行为变化:命令模式

模式类型

行为变化

命令模式

将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。

使用场景

  • 通过操作来参数化对象

  • 用于代替包含行为的参数化 UI 元素的回调函数,此外还被用于对任务进行排序和记录操作历史记录等。

举例

使用命令模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Command {
public:
virtual void execute() = 0;
};

class ConcreteCommand1 : public Command {
private:
string arg;
public:
void execute() override {
// ...
}
};

class ConcreteCommand2 : public Command {
private:
string arg;
public:
void execute() override {
// ...
}
};

class ConcreteCommands : public Command {
private:
vector<Command> commands;
public:
void addCommand() { ... }
void execute() override {
for command in commands:
// ...
}
}

class Invoker {
private:
Command *comm;
public:
void Invoker(const Command *comm_) : comm(comm) { }
void doSomething() {
this->comm->execute();
}
};