Z

命令模式(Command Pattern)

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

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

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

 1abstract class Command {
 2    abstract execute(): void
 3    abstract rollback(): void
 4}
 5
 6class Bold extends Command {
 7    execute() {
 8        console.log('bold')
 9    }
10
11    rollback() {
12        console.log('rollback bold')
13    }
14}
15
16class UnderLine {
17    execute() {
18        console.log('underline')
19    }
20
21    rollback() {
22        console.log('rollback underline')
23    }
24}
25
26new Bold().execute();
27new Bold().execute();
28new UnderLine().execute();
29new UnderLine().execute();
30new UnderLine().rollback();

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