/
index.ts
74 lines (57 loc) · 1.37 KB
/
index.ts
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
// https://en.wikipedia.org/wiki/Observer_pattern
namespace ObserverPattern {
class Subject {
private observers: Observer[] = [];
public register(observer: Observer): void {
this.observers.push(observer);
}
public unregister(observer: Observer): void {
var n: number = this.observers.indexOf(observer);
this.observers.splice(n, 1);
}
public notify(): void {
console.log("notify all the observers");
var i: number, max: number;
for (i = 0, max = this.observers.length; i < max; i += 1) {
this.observers[i].notify();
}
}
}
interface Observer {
notify(): void;
get name(): string;
}
class ConcreteObserver implements Observer {
private _name: string;
get name(): string {
return this._name;
}
constructor(name: string) {
this._name = name;
}
public notify(): void {
console.log(this._name + " notified");
}
}
// Client code
var sub = new Subject();
var ob1 = new ConcreteObserver("1");
var ob2 = new ConcreteObserver("2");
var ob3 = new ConcreteObserver("3");
sub.register(ob1);
sub.register(ob2);
sub.register(ob3);
sub.notify();
sub.unregister(ob1);
sub.notify();
// Output
/*
notify all the observers
1 notified
2 notified
3 notified
notify all the observers
2 notified
3 notified
*/
}