《设计模式》之命令模式
2020-06-09 本文已影响0人
魅猫之
定义:
命令模式:将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。
命令模式在Java的框架中使用非常频繁,比如最近我研究的一个Java的架构基础框架COLA,里面就使用了命令模式来处理业务请求;
代码:
// 命令接口
interface ICommand {
execute(): void
}
// 增加用户命令
class AddUserCommand implements ICommand {
constructor(public name: string) {
this.name = name
}
public execute() {
console.log('add user:' + this.name)
}
}
// 删除用户命令
class DeleteUserCommand implements ICommand {
constructor(public id: number) {
this.id = id
}
public execute() {
console.log('delete user by id:' + this.id)
}
}
// 命令执行者,这里可以设置一个线程池来调度
class CommandHub {
public send(cmd: ICommand) {
cmd.execute()
}
}
const commandHub = new CommandHub()
// 发送添加用户命令
const addUserCommand = new AddUserCommand('mimi')
commandHub.send(addUserCommand)
// 发送删除用户命令
const deleteUserCommand = new DeleteUserCommand(99)
commandHub.send(deleteUserCommand)
如果需要实现撤销命令,实现如下
// 命令接口
interface ICommand {
execute(): void
// 撤销方法
undo(): void
}
在实现类里,加入撤销该操作的逻辑,然后每个命令都发到一个队列里,CommandHub不断从队列里取出命令执行execute方法,执行完了再放到历史命令队列里,当撤销操作的时候,从历史命令队列里取出命令,执行redo方法;