-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathComposite.js
79 lines (66 loc) · 1.69 KB
/
Composite.js
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
70
71
72
73
74
75
76
77
78
79
'use strict';
class Component {
constructor() {
console.log('Component Class created');
}
operation() {
console.log('Component.operation invoked');
}
add(Component) {
console.log('Component.add invoked');
}
remove(Component) {
console.log('Component.remove invoked');
}
getChild(key) {
console.log('Component.getChild invoked');
}
}
class Leaf extends Component {
constructor(name) {
super();
this.name = name;
console.log('Leaf Class created');
}
operation() {
console.log('Leaf.operation invoked');
console.log(this.name);
}
}
class Composite extends Component {
constructor(name) {
super();
this.name = name;
this.children = [];
console.log('Composite Class created');
}
operation() {
console.log('Composite operation for: ' + this.name)
for (var i in this.children) {
this.children[i].operation();
}
}
add(Component) {
console.log('Composite.add invoked');
this.children.push(Component);
}
remove(Component) {
console.log('Composite.remove invoked');
for (var i in this.children) {
if (this.children[i] === Component) {
this.children.splice(i, 1);
}
}
}
getChild(key) {
console.log('Composite.getChild invoked');
return this.children[key];
}
}
var composite1 = new Composite('C1');
composite1.add(new Leaf('L1'));
composite1.add(new Leaf('L2'));
var composite2 = new Composite('C2');
composite2.add(composite1);
composite1.getChild(1).operation();
composite2.operation();