定義:
命令模式:將請求封裝成對象,這可以讓你使用不同的請求、隊列,或者日志請求來參數(shù)化其他對象。命令模式也可以支持撤銷操作。
命令模式在Java的框架中使用非常頻繁,比如最近我研究的一個Java的架構(gòu)基礎框架COLA,里面就使用了命令模式來處理業(yè)務請求;
代碼:
// 命令接口
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)
}
}
// 命令執(zhí)行者,這里可以設置一個線程池來調(diào)度
class CommandHub {
public send(cmd: ICommand) {
cmd.execute()
}
}
const commandHub = new CommandHub()
// 發(fā)送添加用戶命令
const addUserCommand = new AddUserCommand('mimi')
commandHub.send(addUserCommand)
// 發(fā)送刪除用戶命令
const deleteUserCommand = new DeleteUserCommand(99)
commandHub.send(deleteUserCommand)
如果需要實現(xiàn)撤銷命令,實現(xiàn)如下
// 命令接口
interface ICommand {
execute(): void
// 撤銷方法
undo(): void
}
在實現(xiàn)類里,加入撤銷該操作的邏輯,然后每個命令都發(fā)到一個隊列里,CommandHub不斷從隊列里取出命令執(zhí)行execute方法,執(zhí)行完了再放到歷史命令隊列里,當撤銷操作的時候,從歷史命令隊列里取出命令,執(zhí)行redo方法;