javascript 命令模式 的案例介绍与使用
dearweb 发布:2023-03-09 07:59:58阅读:JavaScript命令模式是一种行为型设计模式,它通过将请求封装成一个对象,从而允许我们将不同的请求排队、记录请求日志、支持撤销操作等。以下是一个JavaScript命令模式的案例:
假设我们有一个灯对象,该对象有两个方法:turnOn()和turnOff(),用于打开和关闭灯。我们希望创建一个遥控器对象,该对象可以记录执行过的命令,并支持撤销操作。我们可以使用命令模式来实现这个功能。代码如下:
```javascript
// 定义灯对象
var Light = {
turnOn: function() {
console.log("Light is on.");
},
turnOff: function() {
console.log("Light is off.");
}
}
// 定义命令对象
var Command = {
execute: function() {},
undo: function() {}
}
// 定义打开灯命令对象
var TurnOnCommand = Object.create(Command);
TurnOnCommand.execute = function() {
Light.turnOn();
}
TurnOnCommand.undo = function() {
Light.turnOff();
}
// 定义关闭灯命令对象
var TurnOffCommand = Object.create(Command);
TurnOffCommand.execute = function() {
Light.turnOff();
}
TurnOffCommand.undo = function() {
Light.turnOn();
}
// 定义遥控器对象
var RemoteControl = {
commands: [],
current: -1,
execute: function(command) {
command.execute();
this.commands.push(command);
this.current++;
},
undo: function() {
if (this.current >= 0) {
this.commands[this.current].undo();
this.current--;
}
},
redo: function() {
if (this.current < this.commands.length - 1) {
this.current++;
this.commands[this.current].execute();
}
}
}
// 测试遥控器对象
RemoteControl.execute(TurnOnCommand); // 输出:Light is on.
RemoteControl.execute(TurnOffCommand); // 输出:Light is off.
RemoteControl.undo(); // 输出:Light is on.
RemoteControl.redo(); // 输出:Light is off.
```
在上述代码中,我们定义了一个名为Light的对象,该对象包含了打开和关闭灯的方法。然后,我们定义了一个名为Command的对象,它包含execute和undo方法,用于执行和撤销命令。接下来,我们定义了TurnOnCommand和TurnOffCommand对象,它们分别表示打开和关闭灯的命令。这些命令对象都继承了Command对象,并实现了自己的execute和undo方法。
然后,我们定义了一个名为RemoteControl的对象,它包含了commands、current、execute、undo和redo方法。这个遥控器对象可以执行、撤销和重做命令,并记录命令执行的顺序。我们使用execute方法执行TurnOnCommand和TurnOffCommand命令,并使用undo和redo方法撤销和重做命令。
小礼物走一波,支持作者
赏还没有人赞赏,支持一波吧