0%

命令模式

命令模式

一个请求(方法调用)封装为一个对象,使用不同的请求对客户端进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作

日志记录,可撤销

核心概念

命令模式

  • Command 命令接口
  • ConcreteCommand 命令实现,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作
  • Receiver 接收者,真正执行命令的对象,实现命令要求的相应功能
  • Invoker 要求命令对象执行请求,通常会持有命令对象,客户端触发命令的地方
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* 命令接口
* @author zh
* @date 2022/10/13 15:29
*/
public interface Command {

// 命令执行
void execute();
}

/**
* @author zh
* @date 2022/10/13 15:30
*/
public class ConcreteCommand implements Command{

private Receiver receiver;

public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
@Override
public void execute() {
// 调用接收者的执行方法
receiver.action();
}
}

/**
* 接收者
* @author zh
* @date 2022/10/13 15:30
*/
public class Receiver {

// 真正执行命令操作的代码
public void action(){
System.out.println("开始工作了");
}
}

/**
* @author zh
* @date 2022/10/13 15:32
*/
public class Invoker {

private Command command;

public Command getCommand() {
return command;
}

public void setCommand(Command command) {
this.command = command;
}

public void runCommand(){
command.execute();
}
}

优缺点

优点

  • 更松散的耦合
  • 更动态的控制
  • 更好的扩展性

缺点

使用场景

  • 抽象出待执行的动作以参数化某对象

欢迎关注我的其它发布渠道