-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample04.ts
More file actions
69 lines (53 loc) · 1.23 KB
/
example04.ts
File metadata and controls
69 lines (53 loc) · 1.23 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
class Light {
private isOn = false;
turnOn(): void {
this.isOn = true;
console.log("💡 Світло увімкнено");
}
turnOff(): void {
this.isOn = false;
console.log("🔌 Світло вимкнено");
}
}
interface Command {
execute(): void;
undo(): void;
}
class TurnOnCommand implements Command {
constructor(private light: Light) { }
execute(): void {
this.light.turnOn();
}
undo(): void {
this.light.turnOff();
}
}
class TurnOffCommand implements Command {
constructor(private light: Light) { }
execute(): void {
this.light.turnOff();
}
undo(): void {
this.light.turnOn();
}
}
class CommandQueue {
private queue: Command[] = [];
addCommand(command: Command): void {
this.queue.push(command);
}
runAll(): void {
for (const command of this.queue) {
command.execute();
}
this.queue = [];
}
}
const light = new Light();
const queue = new CommandQueue();
const turnOn = new TurnOnCommand(light);
const turnOff = new TurnOffCommand(light);
queue.addCommand(turnOn);
queue.addCommand(turnOff);
queue.addCommand(turnOn);
queue.runAll();