设计者模式之GOF23命令模式
命令模式Command
将一个请求封装为一个对象,从而使我们可用不同的请求对客户参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务transaction模式
在命令发出,命令执行前后可以进行相关操作也具有更高的扩展性,包括多个执行者,多个命令的情况
结构:
-Command抽象命令类
-ConcreteCommand具体命令类(持有Receiver类)
-Invoker调用者/请求者(持有Command类,并不直接和执行者交互)
-Receiver接收者/执行者
-客户端
开发中常见的场景:
-Struts2中,action的整个调用过程中就有命令模式
-数据库事务机制的底层实现
-命令的撤销和恢复
例子:下达命令,执行的过程
/**
* 命令真正的执行者
* @author 小帆敲代码
*
*/
public class Receive {
public void action() {
System.out.println("Receive.action()");
}
}
void execute();//执行
}
class ConcreteCommand implements Command{
private Receive receive;//可以是容器,一个命令多个执行者
public ConcreteCommand(Receive receive) {
super();
this.receive = receive;
}
public void execute() {
receive.action();
}
}
/**
* 命令的发起者
* @author 小帆敲代码
*
*/
public class Invoke {
private Command command;//可以是容器持有多个命令
public Invoke(Command command) {
super();
this.command = command;
}
public void call() {
command.execute();
}
}
public class Client {
public static void main(String[] args) {
Command c=new ConcreteCommand(new Receive());
Invoke i=new Invoke(c);
i.call();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 7 个最近很火的开源项目「GitHub 热点速览」
· 博客园2025新款「AI繁忙」系列T恤上架
· DeepSeekV3:写代码很强了
· 记一次 .NET某固高运动卡测试 卡慢分析
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提