《设计模式》之命令模式

定义:

命令模式:将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其他对象。命令模式也可以支持撤销操作。

命令模式在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方法;

你可能感兴趣的:(《设计模式》之命令模式)