命令模式

与执行分离

场景


不立刻执行逻辑,而是以命令形式存在
命令本身包含处理逻辑,传入相关参与对象就具备执行的全部条件
命令发送者和执行者解耦

代码


Sample
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
public interface Command {
void execute();
}

// Command with parameter
public class CommandA implements Command {
private Param param;
public CommandA(Param param) {
this.param = param;
}

@Override
public void execute(){
// logic a
}
}

// Command without parameter
public class CommandB implements Command {
@Override
public void execute(){
// logic b
}
}

public class Invoker {
private List<Command> list;

public Invoker() {
list = new ArrayList<>();
}

public receiveCommand(Command command) {
list.add(command);
}

public invoke() {
for(Command c : list) {
c.execute();
}
}
}

优缺点


优点:

  • 每个命令封装自身执行逻辑,可以重用
  • 逻辑以命令形式存在,方便重做/撤销/延迟

缺点:

  • 增加了很多具体命令类

应用


Runnable接口,只代表一个线程逻辑,不关心何时被谁执行