命令模式通过将请求封装为对象,实现调用者与执行者的解耦,支持撤销、重做、任务队列和延迟执行等功能;例如定义统一execute接口,不同命令如打开文件、保存数据各自实现,主程序只需调用command.execute();命令对象可提供undo方法并维护历史栈以支持撤销;命令可存入队列用于后台调度、宏命令组合或网络请求重试;新增功能只需扩展新命令类,提升扩展性与测试便利性,适用于构建灵活、可维护的python系统,但需保持命令轻量避免过度设计。

Python命令模式的核心作用是将请求封装成对象,从而让行为的调用者与执行者解耦。这种设计模式在需要支持撤销操作、延迟执行、日志记录或任务队列等场景中特别有用。
实现请求的封装与解耦
命令模式把“做什么”和“谁来做”分离开来。通过将每个操作封装为一个独立的命令对象,调用方不需要知道具体执行逻辑,只需要触发命令即可。
例如,可以定义一个统一的接口(如execute方法),不同命令类实现各自的逻辑:
- 打开文件命令
- 保存数据命令
- 发送邮件命令
这样主程序只需调用command.execute(),无需关心内部细节。
立即学习“Python免费学习笔记(深入)”;
支持撤销和重做功能
命令对象可以额外提供undo方法,记录执行前的状态,便于回退操作。
比如文本编辑器中的删除动作,命令对象可以保存被删内容,在用户点击撤销时恢复原文。
实现方式通常包括:
- 在执行前保存状态快照
- 维护一个历史栈记录已执行命令
- 按需逐个调用undo进行回退
实现任务队列与延迟执行
命令对象可以被存储在列表或队列中,实现批量处理或定时执行。
典型应用场景有:
- 后台任务调度:将用户操作暂存,由工作线程依次执行
- 宏命令:组合多个命令,一键运行
- 网络请求重试:失败后重新放入队列等待下次处理
提升代码扩展性与测试便利性
新增功能时只需添加新的命令类,不影响原有结构。每个命令独立,便于单元测试。
比如添加“导出pdf”功能,只需写一个新类实现execute,注册到菜单即可使用。
基本上就这些。命令模式让python程序更灵活,适合构建复杂但可维护的操作系统。不复杂但容易忽略的是,保持命令轻量,避免过度设计。


