Zhengrenzhe

(°∀°)ノ 老打杂了

用户工具

站点工具


设计模式:模式:命令模式

命令模式(Command Pattern)

Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.

命令模式是一个高内聚的模式,也是一个在特定场景下离不开的模式。命令模式如其名,它将一系列逻辑封装为一个命令(对象),我们只需要执行这个对象,就等于完成了这个功能。

通过把逻辑封装为一个命令,我们可以对命令进行审计、撤销、恢复等功能,这个功能在具有命令特性的业务场景的特别实用,典型的就是文本编辑器。

abstract class Command {
    abstract execute(): void
    abstract rollback(): void
}

class Bold extends Command {
    execute() {
        console.log('bold')
    }

    rollback() {
        console.log('rollback bold')
    }
}

class UnderLine {
    execute() {
        console.log('underline')
    }

    rollback() {
        console.log('rollback underline')
    }
}

new Bold().execute();
new Bold().execute();
new UnderLine().execute();
new UnderLine().execute();
new UnderLine().rollback();

这是一个典型的命令模式的结构,execute方法中包含该命令实际的逻辑,rollback方法中包含该命令的反逻辑,用于撤销操作。例如对于加粗来说,反命令就是取消加粗。当然实现undo/redo并不只有这一种办法,记录要操作的对象的diff变化也是一种办法。

设计模式/模式/命令模式.txt · 最后更改: 2020/03/05 12:12 由 zhengrenzhe