命令模式
字数: 0 字 时长: 0 分钟
简介
命令模式(Command Pattern)的核心思想是:把请求封装成一个对象,使你可以将其排队、撤销或记录日志等。比如餐厅点餐,客人只需要创建一个点菜订单,而不需要直接与厨师交互,服务员可对订单进行排队、撤销或记录流水。
UML 类图
- 命令接口(Command):声明执行操作的方法,比如
execute()
- 具体命令(ConcreteCommand):实现命令接口,负责调用接收者去完成请求
- 接收者(Receiver):负责真正执行具体的业务逻辑
- 请求者(Invoker):调用命令对象,执行请求
- 客户端(Client):创建具体命令对象,并设置命令的接收者,最后把命令交给请求者执行
实现示例
以“任务调度系统”为例,使用命令模式构建一个可扩展的任务执行平台
java
// 1. 命令接口
interface Task {
void execute();
}
// 2. 具体命令
class EmailTask implements Task {
@Override
public void execute() {
System.out.println("发送通知邮件");
}
}
class BackupTask implements Task {
@Override
public void execute() {
System.out.println("备份数据");
}
}
class ReportTask implements Task {
@Override
public void execute() {
System.out.println("生成报表");
}
}
// 3. 任务调度器
class TaskScheduler {
private Queue<Task> taskQueue = new LinkedList<>();
public void addTask(Task task) {
taskQueue.offer(task);
}
public void run() {
while (!taskQueue.isEmpty()) {
Task task = taskQueue.poll();
task.execute();
}
}
}
// 4. 调用示例
public static void main(String[] args) {
TaskScheduler scheduler = new TaskScheduler();
scheduler.addTask(new EmailTask());
scheduler.addTask(new BackupTask());
scheduler.addTask(new ReportTask());
scheduler.run();
}