「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。。
1.命令模式的简介
命令模式(Command Pattern):在我们开发软件的过程中,有时我们需要指定某个请求及其对应的接收者,这个时候就适用命令模式。官方来讲就是,把一个请求封装成一个对象,可以使用不同的参数来匹配不同的请求,使得请求发送者和请求接收者高度解耦,把对应的接收者信息封装到请求对象中,即我们可以通过这个指定具体的请求接收者。此外它支持请求撤销操作。它是一种行为型设计模式。
优点:增强系统扩展性,降低请求发送者和请求接收者之间的耦合性,符合开闭原则。 缺点:每一个具体操作都要封装一个命令类,可能会产生大量的命令类,不易维护。
2.uml类图
3.代码举例
1.抽象命令类(Command)角色:定义执行命令方法execute()和 撤销方法undo()(可选)的接口。
2.具体命令类(Concrete Command)角色:抽象命令角色的具体实现类,此外它里面包含了具体的命令接收者的信息。
3.接收者(Receiver)角色:接收命令,并执行具体功能,命令功能的真正实现者。
- 请求者(Invoker)角色:可以包含多个命令对象,发送不同的命令请求,它不直接访问命令接收者对象,它只需发送命令,匹配对应的接收者。
4.应用案例
在Spring框架中 JdbcTemplate 中 以org.springframework.jdbc.core.JdbcTemplate#execute(java.lang.String)为例 JdbcTemplate 是命令调用者
ExecuteStatementCallback:具体命令的实现接口
StatementCallback 类似于一个命令接口,下面是它的具体命令实现。
Statement stmt :命令的具体接收者。