美文网首页
《设计模式》之命令模式

《设计模式》之命令模式

作者: 魅猫之 | 来源:发表于2020-06-09 23:26 被阅读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方法;

    相关文章

      网友评论

          本文标题:《设计模式》之命令模式

          本文链接:https://www.haomeiwen.com/subject/bzeytktx.html