命令模式(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变化也是一种办法。