设计模式之命令模式
命令模式
-
命令模式结构图:
-
示例代码:
// 命令接受者,负责具体执行命令 public class Receiver { public void action(){ System.out.println("开始执行命令========"); } } // 命令抽象类 public interface Command { void execute(); } // 具体命令角色A public class ConcreteCommandA implements Command{ private Receiver receiver; public ConcreteCommandA(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { System.out.println("执行命令A"); receiver.action(); } } // 具体命令角色B public class ConcreteCommandB implements Command{ private Receiver receiver; public ConcreteCommandB(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { System.out.println("执行命令B"); receiver.action(); } } // 命令请求者 public class Invoker { List<Command> list = new ArrayList<>(); public void attach(Command command){ System.out.println("添加命令"); list.add(command); } public void detach(){ System.out.println("撤销命令"); if (!list.isEmpty()){ list.remove(list.size() -1); } } public void execute(){ list.forEach(a -> a.execute()); } } // 测试类 public class CommandTest { public static void main(String[] args) { Invoker invoker = new Invoker(); invoker.attach(new ConcreteCommandA(new Receiver())); invoker.attach(new ConcreteCommandA(new Receiver())); invoker.attach(new ConcreteCommandB(new Receiver())); invoker.attach(new ConcreteCommandB(new Receiver())); invoker.execute(); } }
-
总结:
优点:通过引入抽象接口,解偶了命令请求与实现,扩展性好,支持组合命令,可在现有命令的基础上,增加额外的功能;
缺点:具体命令类可能过多,增加了系统的复杂性.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探