定义: 将请求封装成对象,以便使用不同的请求、队列或日志来参数化其他对象 同时支持可撤销的操作 类比:在点餐时,下单就是一个命令,你可以撤销、修改或重新下单 应用场景 参数化对象之间的请求 支持可撤销操作时 将请求排队和执行日志 优缺点 优点 解耦请求发送者和接收者 可以轻松添加新的命令 支持撤销和恢复操作 缺点 可能增加系统的复杂性 实现代码 // 命令接口 interface Command { execute(): void; } // 接收者类 class Receiver { public doSomething(): void { console.log('Receiver: Working on something...'); } public doSomethingElse(): void { console.log('Receiver: Working on something else...'); } } // 具体命令类 class ConcreteCommand1 implements Command { private receiver: Receiver; constructor(receiver: Receiver) { this.receiver = receiver; } public execute(): void { console.log('ConcreteCommand1: Execute command on receiver.'); this.receiver.doSomething(); } } class ConcreteCommand2 implements Command { private receiver: Receiver; constructor(receiver: Receiver) { this.receiver = receiver; } public execute(): void { console.log('ConcreteCommand2: Execute another command on receiver.'); this.receiver.doSomethingElse(); } } // 调用者类 class Invoker { private onStart: Command; private onFinish: Command; public setOnStart(command: Command): void { this.onStart = command; } public setOnFinish(command: Command): void { this.onFinish = command; } public doSomethingImportant(): void { console.log('Invoker: Does anybody want something done before I begin?'); if (this.onStart) { this.onStart.execute(); } console.log('Invoker: ...doing something really important...'); console.log('Invoker: Does anybody want something done after I finish?'); if (this.onFinish) { this.onFinish.execute(); } } } // 客户端代码 const invoker = new Invoker(); const receiver = new Receiver(); invoker.setOnStart(new ConcreteCommand1(receiver)); invoker.setOnFinish(new ConcreteCommand2(receiver)); invoker.doSomethingImportant();