JavaScript命令模式

命令模式:

命令是指执行特定事情的一个指令,在js中,其实高阶函数就是对命令模式的应用,将函数作为参数在整个生命周期中传递,那么函数参数就是个命令指令。

最常见的使用场景是请求者和接收者之间并不知道对方是谁,通过命令(一般是函数)来将彼此之间连接起来。

如果写UI的和js逻辑的是2个人,对于写UI的并不关注比如button的click事件是如何执行的,而只是预留一个onclick事件。
对于写js逻辑的也并不关注UI是如何实现的,只需要实现事件函数执行某种功能,比如点击button弹窗出现,或执行动画等。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var dialog = {
show() {
console.log('show dialog');
}
};

var animation = {
start() {
console.log('show animation');
}
};

var setCommand = function(btn, cmd) {
btn.onclick = function(){
cmd.run();
};
};

class showDialogCommand {
constructor(receiver){
this.receiver = receiver;
}
run() {
this.receiver.show();
}
}

class startAnimationCommand {
constructor(receiver){
this.receiver = receiver;
}
run(){
this.receiver.start();
}
}

setCommand(btn1, new showDialogCommand(dialog));
setCommand(btn2, new startAnimationCommand(animation));

从以上代码可以看出,通过setCommand函数和相关command的类,将点击button显示dialog,开始运行动画等事件和UI分离开来,即写ui的通过setCommand来调用相关的click事件。

当然也可以不采用面向对象的方式来实现,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var dialog = {
show() {
console.log('show dialog');
}
};

var animation = {
start() {
console.log('show animation');
}
};

var btnClick = function(btn, fn) {
btn.onclick = fn;
};

btnClick(btn1, dialog.show);
btnClick(btn2, animation.start);

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!