一、原理与通俗理解
命令模式将请求封装为一个命令对象,将发出请求的对象与执行请求的对象解耦。命令模式可以让你在不同时间点调用命令,将命令放入队列中,并实现对命令的撤销和恢复操作。
比如在餐馆点餐,你(调用者)跟服务员(调用对象)说要来一份炒饭(命令),服务员就去通知厨师(执行对象)去炒一份炒饭。
二、项目开发日志功能
需求:记录日志并支持撤销操作
实现:
- 定义命令接口Command,定义执行命令、撤销命令方法
- LogCommand 类实现了具体的日志记录命令,记录日志时备份当前日志,并在撤销时恢复到备份的日志状态。
- LogCommandInvoker 类负责执行和管理命令,执行命令时记录历史记录,并且支持撤销操作。
- LogManager 类负责实际的日志记录操作,包括记录日志、获取当前日志内容以及清空日志。
// 1. 定义命令接口
interface Command {
void execute(); // 执行命令
void undo(); // 撤销命令
}
// 2. 实现具体的日志记录命令
class LogCommand implements Command {
private LogManager logManager;
private String logMessage;
private String backupLog; // 用于撤销操作
public LogCommand(LogManager logManager, String logMessage) {
this.logManager = logManager;
this.logMessage = logMessage;
}
@Override
public void execute() {
backupLog = logManager.getLog(); // 备份当前日志
logManager.log(logMessage); // 记录新日志
}
@Override