设计模式 --命令模式

210 阅读2分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。。

1.命令模式的简介

命令模式(Command Pattern):在我们开发软件的过程中,有时我们需要指定某个请求及其对应的接收者,这个时候就适用命令模式。官方来讲就是,把一个请求封装成一个对象,可以使用不同的参数来匹配不同的请求,使得请求发送者和请求接收者高度解耦,把对应的接收者信息封装到请求对象中,即我们可以通过这个指定具体的请求接收者。此外它支持请求撤销操作。它是一种行为型设计模式。

优点:增强系统扩展性,降低请求发送者和请求接收者之间的耦合性,符合开闭原则。 缺点:每一个具体操作都要封装一个命令类,可能会产生大量的命令类,不易维护。

2.uml类图

image.png

3.代码举例

1.抽象命令类(Command)角色:定义执行命令方法execute()和 撤销方法undo()(可选)的接口。

image.png

2.具体命令类(Concrete Command)角色:抽象命令角色的具体实现类,此外它里面包含了具体的命令接收者的信息。

image.png

image.png

image.png

3.接收者(Receiver)角色:接收命令,并执行具体功能,命令功能的真正实现者。

image.png

  1. 请求者(Invoker)角色:可以包含多个命令对象,发送不同的命令请求,它不直接访问命令接收者对象,它只需发送命令,匹配对应的接收者。

image.png image.png

4.应用案例

在Spring框架中 JdbcTemplate 中 以org.springframework.jdbc.core.JdbcTemplate#execute(java.lang.String)为例 JdbcTemplate 是命令调用者

image.png

ExecuteStatementCallback:具体命令的实现接口

StatementCallback 类似于一个命令接口,下面是它的具体命令实现。

image.png

Statement stmt :命令的具体接收者。