什么是命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。

调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

命令模式最常见的应用场景是:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系。

面向对象例子:

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
40
41
42
43
44
45
46
class RenderLogin{
constructor() {
this.login = document.createElement('div');
this.options = {
width: '100px',
height: '100px',
border: '1px solid red'
}
}

render(options) {
this.options = {...this.options, ...options};
for (let key of Object.keys(this.options)) {
this.login.style[key] = this.options[key];
}
document.body.appendChild(this.login);
}

remove() {
document.body.removeChild(this.login);
}
}

class RenderLoginCommand{
constructor() {
this.renderLogin = new RenderLogin();
}

excute(reciever) {
this.renderLogin.render(reciever.options);
}

undo() {
this.renderLogin.remove();
}
}

export class LoginButton{
constructor() {
this.options = {
background: 'grey',
borderRadius: '50%'
}
this.renderLoginCommand = new RenderLoginCommand();
}
}