命令模式(Command)是一种对象行为模式,它是把一个请求封装到一个对象中,使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。命令模式是对命令的封装,它把发出命令的责任与执行命令的责任分开,分别委派给不同的对象。如下图是命令模式的结构图:
这里的参与者都有:
Command
— 声明执行操作的接口。
• ConcreteCommand
— 将一个接收者对象绑定于一个动作。
— 调用接收者相应的操作,以实现 Execute。
•Client
— 创建一个具体命令对象并设定它的接收者。
• Invoker
— 要求该命令执行这个请求。
•Receiver
— 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
由结构图给出对应的类设计,代码如下:

1 class Invoker{//要求命令执行请求 2 private Command command; 3 public Invoker(Command c){ 4 command=c; 5 } 6 public void action(){ 7 System.out.println("execute command action"); 8 command.execute(); 9 } 10 } 11 class Receiver{//实施执行与请求相关的操作 12 public void action(){ 13 System.out.println("this is Receiver's action,I will complete service"); 14 } 15 } 16 interface Command{ 17 void execute(); 18 } 19 class ConcreteCommand implements Command{//将一个接收者对象绑定一个动作,并调用接收者相应的操作,以实现execute 20 private Receiver rec; 21 public ConcreteCommand(Receiver rec){ 22 this.rec=rec; 23 } 24 public void execute(){ 25 System.out.println("Call Receiver's action"); 26 rec.action(); 27 } 28 } 29 public class Test{ 30 public static void main(String[] args) { 31 Receiver rec=new Receiver(); 32 Command com=new ConcreteCommand(rec); 33 Invoker inv=new Invoker(com); 34 inv.action(); 35 } 36 }
这里,我们定义好命令的接收者对象Receiver,然后将其传递给命令对象com,最后由inv要求该命令执行这个请求。从这里可以看出,命令模式将发出命令与执行命令这两个动作分开了,Command发出命令,但催动该命令的执行是Invoker完成的。所以,如果有排队需求的话,可以在Invoker这里设置相关功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?