设计模式之命令模式
# 设计模式之命令模式
# 一、简介
**命令模式(Command Pattern)**是一种数据驱动的设计模式。它将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找到可以处理该命令的对象执行命令。
# 二、实现方式
# 1、抽象命令类(Command)
/**
* 命令接口
*/
public interface Command {
void execute();
}
1
2
3
4
5
6
2
3
4
5
6
# 2、具体命令类(ConcreteCommand)
持有接收者对象的引用,调用接收者的相关方法来执行具体逻辑
/**
* 具体命令角色
*/
public class ConcreteCommand1 implements Command {
private Receiver receiver;
public ConcreteCommand1(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
// 调用接收者的相关方法来执行具体逻辑
receiver.action1();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3、接收者(Receiver)
/**
* 接收者
*/
public class Receiver {
// 执行具体命令逻辑的方法
public void action1(){
System.out.println("执行具体操作逻辑1");
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 4、调用者(Invoker)
持有命令对象的引用,调用命令对象的相关方法来执行命令
/**
* 请求者角色
*/
public class Invoker {
private Command command1;
public void action1(){
command1.execute();// 调用具体命令对象的相关方法,执行具体命令
}
public Command getCommand1() {
return command1;
}
public void setCommand1(Command command1) {
this.command1 = command1;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 三、应用场景
# 1、Spring-Jdbc模块中的命令模式: JdbcTemplate
StatementCallback
接口 ,相当于抽象命令类(Command
)
QueryStatementCallback
实现了StatementCallback
接口,相当于具体命令类(ConcreteCommand
)也充当命令接收者
JdbcTemplate
相当于调用者@Override @Nullable public <T> T execute(StatementCallback<T> action) throws DataAccessException { return execute(action, true); }
1
2
3
4
5